0
点赞
收藏
分享

微信扫一扫

【强化学习】贝尔曼公式 - bellman equation

在这里插入图片描述


👨‍💻个人主页:@元宇宙-秩沅

👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅!

👨‍💻 本文由 秩沅 原创

👨‍💻 收录于专栏:Unity游戏demo

🅰️Unity3D赛车游戏



文章目录


前言


😶‍🌫️版本: Unity2021
😶‍🌫️适合人群:Unity初学者
😶‍🌫️学习目标:3D赛车游戏的基础制作
😶‍🌫️技能掌握:


🎶(A系统优化——相机的跟随


为什么要优化:


代码过于复杂,并且滑轮镜头不适合后续游戏的进行


单个场景镜头


  • 优化如下
  //相机跟随功能
    public void FllowEffect()  
    {  
        //实现从不同的角度切入观看
        transform.position = target.position * (1 - smoothTime) + transform.position * smoothTime;
        transform.LookAt(target.parent );

        smoothTime = (Control.Km_H  >=150 ) ? ( Mathf .Abs(Control.Km_H)/150)  - 0.85f : 0.45f;
    }

在这里插入图片描述

  • 此时代码放入了LateUpdate里面
  • 改成放入了FixedUpdate里面

在这里插入图片描述
在这里插入图片描述
原因:FixedUpdate是固定帧执行,精准的实时跟随反而会放大细节


多个场景镜头


  • 设置多个场景的位置
    在这里插入图片描述

  • 输入管理更新
    在这里插入图片描述

  • 演示效果

在这里插入图片描述

脚本

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//-------------------------------------
//—————————————————————————————————————
//___________项目:   
//___________功能: 相机的管理
//___________创建者:_____秩沅_____
//_____________________________________
//-------------------------------------
public class CameraContorl : MonoBehaviour
{
    //目标物体
    public Transform targetOb;
    public Transform[] target ;
    private CarMoveControl Control;
    public float  speed;
    //相机平滑值
    public float smoothTime;
    //镜头的选择
    public int ChooseIndex ;



    [Header("----------加速时相机属性-------------")]
    //加速时的跟随力度
    [Range(1, 5)]
    public float shiftOff;

    //目标视野 (让其显示可见)
    [SerializeField ]
    private float addFov;

    //当前视野
    private float startView;
    [Range(1,10)]
    public float followLerp = 1;
    [Range(1,10)]
    public float angleLerp = 1;
    //为一些属性初始化

    private void Start()
    {      
        startView = Camera.main.fieldOfView; //将相机的开始属性赋入
        addFov = 30;

        //获取镜头位置
        for (int i = 0; i < 3; i++)
        {
            target[i] = targetOb.GetChild(0).GetChild(i);
        }
    }

    private void Update()
    {
        TabViewChoose();  //选择镜头
    }

    void FixedUpdate()
    {
        CameraAtrribute(); //相机属性显示

        FllowEffect(); //相机跟随功能

        FOXChange();  //加速时相机视野的变化
    }

    //选择场景
    private void TabViewChoose()
    {
        //按下Tab键时
       if(InputManager.InputManagerment.TabView)

            ChooseIndex = ChooseIndex > 1 ? 0 : ChooseIndex+1;
    }

    //相机跟随功能
    private void FllowEffect()  
    {
        //-------1.镜头的跟随方法一---------
        //实现从不同的角度切入观看
        //transform.position = target[ChooseIndex].position * (1 - smoothTime) + transform.position * smoothTime;
        //速度不同跟随的角度不同
        //moothTime = (Control.Km_H >= 150) ? (Mathf.Abs(Control.Km_H) / 150) - 0.85f : 0.45f;

        //-------2.镜头的跟随方法二---------

        transform.position = Vector3.Lerp(transform.position, target[ChooseIndex].position, Time.deltaTime * speed);
        
        transform.LookAt(targetOb );

    } 

    //加速时相机视野的变化
    private  void FOXChange()
    {
        if(Input.GetKey(KeyCode.LeftShift) ) //按下坐标shift键生效
        {
            Camera.main.fieldOfView = Mathf.Lerp(Camera.main.fieldOfView , startView + addFov ,Time .deltaTime * shiftOff );
        }
        else
        {
            Camera.main.fieldOfView = Mathf.Lerp(Camera.main.fieldOfView, startView, Time.deltaTime * shiftOff);
        }

    }

    //相机属性显示
    private void CameraAtrribute()
    {
        //实时速度
        Control = targetOb.GetComponent<CarMoveControl>();

        speed = Mathf.Lerp(speed, Control.Km_H / 4, Time.deltaTime);

        speed = Mathf.Clamp(speed, 0, 55);   //对应最大200公里每小时

    }

}

🅰️


⭐【Unityc#专题篇】之c#进阶篇】

⭐【Unityc#专题篇】之c#核心篇】

⭐【Unityc#专题篇】之c#基础篇】

⭐【Unity-c#专题篇】之c#入门篇】

【Unityc#专题篇】—进阶章题单实践练习

⭐【Unityc#专题篇】—基础章题单实践练习

【Unityc#专题篇】—核心章题单实践练习


你们的点赞👍 收藏⭐ 留言📝 关注✅是我持续创作,输出优质内容的最大动力!


在这里插入图片描述


举报

相关推荐

0 条评论