ich habe ein Problem mit den Quaternions. Ich versuche gerade eine Steuerung für mein Flug-Spiel zu programmieren, dabei möchte ich im Prinzip eine Steuerung wie bei dem Spiel Star Wars Rogue Squadron (http://www.youtube.com/watch?v=_cbR_ZTCzFY) implementieren.
Wenn man zum Beispiel nach links fliegt, soll sich der Flieger um die Y-Achse drehen und zugleich auch etwas um die z-Achse drehen. Also sich in die Kurve rollen.
Lässt man die Taste wieder aus, soll sich der Flieger wieder gerade drehen (Z-Achse = 0).
Das Fliegen in alle Richtungen funktioniert schon mal ganz gut! Ich zeige euch hier mal den Code dazu:
Code: Alles auswählen
float r = Input.GetAxis("Horizontal")*rollSpeed*Time.deltaTime;
float p = Input.GetAxis("Vertical")*pitchSpeed*Time.deltaTime;
Quaternion rotZ = Quaternion.AngleAxis(r,new Vector3(0,0,1));
Quaternion rotY = Quaternion.AngleAxis(r,new Vector3(0,1,0));
Quaternion rotX = Quaternion.AngleAxis(p,new Vector3(1,0,0));
transform.rotation *= rotZ;
transform.rotation = rotY * transform.rotation; // um world achsen drehen
transform.rotation *= rotX; //lokal drehen
Code: Alles auswählen
//hier ist das problem, soll den flieger in z-Achse wieder zurück drehen
Quaternion rotBack = transform.rotation;
Vector3 tempRotBack = rotBack.eulerAngles;
rotBack = Quaternion.Euler(tempRotBack.x,tempRotBack.y,0); //funktioniert auch
transform.rotation = Quaternion.Lerp(transform.rotation, rotBack, 0.03f);
Habt ihr eine Ahnung was ich falsch mache? Ich kenne mich leider mit Quaternions noch nicht so gut aus... Gibt es eine einfache Möglichkeit wie ich den z-Wert eines Quaternions auf der z-Achse nach 0 drehen kann? Mit der Methode Quaternion.AngleAxis(..) kann man leider immer nur einen Winkel angeben um den man sich weiter drehen möchte.
Würde mich freuen wenn ihr mir helfen könnt! :) Danke schon mal.
Liebe Grüße,
Northwind877