unity3d编写缓动跟随摄像机

首先声明target为需要跟随的物体

public Transform target;

声明跟随距离,以及跟随距离的增长速度,使用鼠标滚轮可以拉伸镜头

public float viewDistance = 8f;
public float viewDistanceMoveSpeed = 1f;

声明缓动系数

public float springRatio = 0.05f;

然后在LateUpdate函数里编写代码,因为摄像机追踪需要发生在物体移动后。
首先鼠标滚轮可以拉伸镜头

viewDistance += Input.GetAxis("Mouse ScrollWheel") * viewDistanceMoveSpeed;

之后使用Vector3.MoveTowards将相机移动到目标地点。目标地点的坐标计算过程如下。
target.transform.forward得到目标物体当前朝向的前方在世界坐标系下的方向,和Vector.foraward是不同的。之后用目标物体减去这个值,就是当前目标物体所朝方向的后方。
然后摄像机需要稍稍在y轴方向向上移动,可以给人一种略微俯视的感觉。
最后增加进缓动系数来移动摄像机

this.transform.position = Vector3.MoveTowards(transform.position,
            target.transform.position - target.transform.forward * viewDistance + Vector3.up *viewDistance*0.5f,
            (moveSpeed + distance * springRatio) * Time.deltaTime);

最后当摄像机离物体过进的时候,可以隐藏物体,这个在许多游戏中都有类似的实现

 bool visible = Vector3.Distance(this.transform.position, target.transform.position) > 1;
        target.GetComponent<MeshRenderer>().enabled = visible;

完整代码如下

using UnityEngine;

public class CameraTrack3D : MonoBehaviour
{
    public Transform target;
    public float moveSpeed = 3;


    public float viewDistance = 8f;
    public float viewDistanceMoveSpeed = 1f;

    public float springRatio = 0.05f;

    void LateUpdate()
    {
        viewDistance += Input.GetAxis("Mouse ScrollWheel") * viewDistanceMoveSpeed;

        var distance = Vector3.Distance(this.transform.position, target.transform.position);

        this.transform.position = Vector3.MoveTowards(transform.position,
            target.transform.position - target.transform.forward * viewDistance + Vector3.up *viewDistance*0.5f,
            (moveSpeed + distance * springRatio) * Time.deltaTime);
        
        this.transform.LookAt(target.position + target.forward * 10);

        bool visible = Vector3.Distance(this.transform.position, target.transform.position) > 1;
        target.GetComponent<MeshRenderer>().enabled = visible;
    }
}

将此代码挂载到摄像机上,赋值要跟随的物体,同时编写方块的移动代码即可完成一个简易的3D缓动追踪相机

调整参数后可以得到如下效果
在这里插入图片描述


版权声明:本文为o83290102o5原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。