简体   繁体   中英

Strange RotateTowards issue in Unity 3D

I am writing a simple game in Unity 3D with C# as a scripting language. I need to rotate the camera around 180 degrees. The strange thing is the first call of Quarterion.RotateTowards works, while the other one doesn't, although it should be just a reference to the same object.

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

EDIT: I am doing the final assignment newRot = this.transform.rotation; I missed this line when preparing the code snippet. When I am using the second option (where the Quaterion was initialized in the begining, no exception is being thrown, it just does not perform any rotation).

i) You are not initializing your variables correctly. You are hiding the two variables you intend to work on.

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) As @HBomb mentionned, set your rotation back on your game object.

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

NOTE: Quaternion is a struct thus it is passed by value. You cannot expect to work on a reference to your game object's rotation like you appear to be doing with the "newRot" variable.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM