Vector3.Lerp 使用 Unity 中的代码

Vector3.Lerp with code in Unity

我正在 unity 中制作基本的 2D space 射击游戏。我的动作运行良好,摄像机跟随玩家。我一直在绞尽脑汁思考如何让相机从玩家移动到相机移动以赶上它而不需要传送。我被告知使用 Vector3.Lerp 并尝试了一些来自 Whosebug 答案的东西,但 none 似乎适用于我的代码设置方式。有什么建议么? (myTarget 链接到播放器)

public class cameraFollower : MonoBehaviour {
public Transform myTarget;


void Update () {
    if(myTarget != null){
        Vector3 targPos = myTarget.position;
        targPos.z = transform.position.z;
        transform.position = targPos;

        }

    }
}

Lerp移动相机的想法是让相机逐渐平稳地到达目标位置。

相机越远,每帧移动的距离越大,但相机越近,每帧移动的距离越小,使相机更容易进入目标位置。

例如,尝试将 transform.position = targPos; 行替换为:

float speed = 2.5f; // Set speed to whatever you'd like
transform.position = Vector3.Lerp(transform.position, targPos, Time.deltaTime * speed);

如果您进行线性插值 (Lerp),您会冒 Time.deltaTime * speed > 1 的风险,在这种情况下,相机将开始进行插值。也就是说,如果您的目标不是跟随它,它就会走在前面。 另一种方法是在线性插值中使用 pow。

float speed = 2.5f;
float smooth = 1.0f - Mathf.Pow(0.5f, Time.deltaTime * speed);
transform.position = Vector3.Lerp(transform.position, targetPos, smooth);

Mathf.Pow(0.5, time)表示在1/speed秒后,到目标点的距离会走一半。