我正在制作基本的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;
}
}
}
答案 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);