Unity 3D中的Strange RotateTowards问题

时间:2016-02-18 21:29:03

标签: c# unity3d game-engine

我正在使用C#编写一个简单的Unity 3D游戏作为脚本语言。我需要将相机旋转180度左右。奇怪的是第一次调用 Quarterion.RotateTowards ,而另一个没有,尽管它应该只是对同一个对象的引用。

public class ChangeCamera : MonoBehaviour {

Quaternion firstMinionCameraRot, secondMinionCameraRot;

Quaternion newRot; 

// Use this for initialization
void Start () {
    Quaternion firstMinionCameraRot = new Quaternion(0.0f, 1.0f, -0.3f, 0.0f);
    Quaternion secondMinionCameraRot = new Quaternion(-0.3f, 0.0f, 0.0f, -1.0f);
} 

// Update is called once per frame
void Update () {

    newRot = this.transform.rotation;

    // This one works 
    newRot = Quaternion.RotateTowards(newRot, new Quaternion(-0.3f, 0.0f, 0.0f, -1.0f), 0.05f * Time.deltaTime);
    // This one doesn't 
    newRot = Quaternion.RotateTowards(newRot, secondMinionCameraRot, 50.0f * Time.deltaTime);

    newRot = this.transform.rotation;
 }

修改: 我正在做最后的任务newRot = this.transform.rotation;在准备代码片段时,我错过了这一行。当我使用第二个选项时(Quaterion在开始时被初始化,没有异常被抛出,它只是不执行任何旋转)。

1 个答案:

答案 0 :(得分:2)

i)您没有正确初始化变量。您正在隐藏您打算处理的两个变量。

Quaternion firstMinionCameraRot, secondMinionCameraRot;
void Start () {
    firstMinionCameraRot = new Quaternion(0.0f, 1.0f, -0.3f, 0.0f);
    secondMinionCameraRot = new Quaternion(-0.3f, 0.0f, 0.0f, -1.0f);
}

ii)正如@HBomb所提到的,将你的旋转设置回游戏对象。

void Update () {
    transform.rotation = Quaternion.RotateTowards(transform.rotation, secondMinionCameraRot, 50.0f * Time.deltaTime);
 }

注意:Quaternion是一个结构,因此它按值传递。您不能期望像对待“newRot”变量那样处理对游戏对象轮换的引用。