Vector3.Lerp与Unity中的代码

时间:2015-01-11 08:51:20

标签: c# unity3d

我正在制作基本的2D太空射击游戏。我的动作很好,相机跟着玩家。我一直在摸索如何让相机稍稍延迟,让玩家移动到相机移动以便在没有传送的情况下赶上它。有人告诉我使用Vector3.Lerp并尝试了stackoverflow答案中的一些内容,但似乎没有一个与我的代码设置方式一致。有什么建议? (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;

        }

    }
}

2 个答案:

答案 0 :(得分:3)

如果你进行线性插值(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,时间)表示在1 /速度秒后,到达目标点的距离的一半将被移动。

答案 1 :(得分:2)

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);