相机在激活时移动到错误的方向。 Unity5

时间:2015-05-22 18:46:44

标签: c# unity3d

基本上我在场景中有2个摄像头,我按下按钮使第二个摄像头处于活动状态。当它变为活动状态时,我希望它从原始位置移动到我专门放入脚本的位置。但是发生的事情是,当第二台摄像机处于活动状态时,它会移动到远处。

我将第二台相机放在我想要的位置并记录了x / y / z位置和旋转,然后我将它作为startPosition放入脚本中。之后我将相机移开了一点,然后放入Start()移动到它的startPosoton。因此,当我激活第二个相机时,它应该从它的位置移动到此startPosition,但事实并非如此。

有人有这个问题吗?

这是我的代码的一部分:所以当第二台相机激活时,它会执行此操作

public float smoothTime = 2;
private Vector3 newPosition;
private Quaternion newRotation;

private Vector3 startPosition = new Vector3 (-139.56f,6.58f,21.82f);
private Quaternion startRotation = Quaternion.Euler(0.22f,212.71f, 0f);

void Awake(){
    newPosition = transform.position;
    newRotation = transform.rotation;
}

void Start () {
    newPosition = startPosition;
    newRotation = startRotation;
}

void Update () {
    PositionAndRotationChanging ();
}

void PositionAndRotationChanging () {
    transform.position = Vector3.Lerp 
    (transform.position,newPosition,Time.deltaTime * smoothTime);

    transform.rotation = Quaternion.Slerp(transform.rotation, newRotation,    
    Time.deltaTime * smoothTime);

}

1 个答案:

答案 0 :(得分:1)

我认为你误解了lerp的作用。 "线性插值"获取两个值并返回另一个值t%之间的值。如果您从未传入{0}的零{1}},那么您将永远不会在输出中看到任何一个端点。

通常情况下,您可能会传入随时间增加的t。例如,您可以使每个帧增加t一次浮动timer

Time.deltaTime

在您的情况下,您保持float timer; Vector3 startPosition = Vector3.zero; Vector3 endPosition = Vector3.up * 10f; //move from "startPosition" to "endPosition" over 20 seconds void Update() { timer += Time.deltaTime; transform.position = Vector3.Lerp(startPosition, endPosition, timer / 20f); } 或多或少不变。它大约等于tsmoothTime左右。通过反复移动0.02更接近transform.position,您将产生一种有趣的缓和效果 - 因为您的输出将总是接近40%。

编写代码的方式,您可能更愿意使用MoveTowardsRotateTowards,而不是:

endPosition

这些帮助函数的工作方式不同,允许您将public class ExampleClass : MonoBehaviour { public Transform target; public float moveSpeed; public float rotSpeed; void Update() { float move = moveSpeed * Time.deltaTime; transform.position = Vector3.MoveTowards(transform.position, target.position, move); float rot = rotSpeed * Time.deltaTime; transform.rotation = Quaternion.RotateTowards(transform.rotation, target.rotation, rot); } } 个单位移近某个点,或者将X度旋转到更接近某个方向。