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
 
						