我正在使用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在开始时被初始化,没有异常被抛出,它只是不执行任何旋转)。
答案 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”变量那样处理对游戏对象轮换的引用。