2016-05-10 30 views
0

Ich möchte ein Objekt um einen bestimmten Grad, Geschwindigkeit und Richtung in der Z-Achse drehen und dann stoppen.Wie wird ein Objekt in einem bestimmten Winkel mit einer bestimmten Richtung und Geschwindigkeit gedreht?

Dies ist mein Code:

Quaternion targetRotation = Quaternion.AngleAxis(currentRotation.rotateValue, Vector3.forward); 
float step = currentRotation.speed; 
transform.rotation = Quaternion.RotateTowards(transform.rotation, targetRotation, step); 

Damit ich mit der gewünschten Geschwindigkeit und Winkel bewegen kann, aber die Richtung ist nicht korrekt. Was ich mache, ist es 180 zu bewegen, nachdem es 180 erreicht hat. Ich bewege es um 360 und das ist in einer Schleife. Das Problem ist, dass nach 360 statt im Uhrzeigersinn gegen den Uhrzeigersinn bewegt wird. Nicht sicher, was hier vor sich geht, braucht verzweifelte Hilfe.

Vielen Dank im Voraus.

+0

Ihre Frage ist unklar, bitte erklären Sie mehr, was Sie genau tun möchten, möchten Sie nur ein Objekt drehen und was ist der Zustand zu stoppen. –

Antwort

0

Wenn ich es richtig verstehe, was Sie zu tun versuchen, dann vielleicht so etwas wie dies funktionieren würde:

private float anglesToRotate; 
private Quaternion targetRotation, initialRotation; 
private float elapsedTime, duration, speed; 

void Start() 
{ 
    time = 0.0f; 
    duration= 0.0f; 
} 

void Update() 
{ 
    if (time < duration) 
    { 
     time += Time.deltaTime; 
     transform.rotation = Quaternion.Lerp(
            initialRotation, 
            targetRotation, 
            (speed * time)/duration); 
    } 
} 

public void Rotate(float angles, float speed, float duration) 
{ 
    initialRotation = transform.rotation; 
    targetRotation = Quaternion.Euler(
         transform.rotation.x, 
         transform.rotation.y, 
         transform.rotation.z + anglesToRotate); 
    time = 0.0f; 
} 

NOTES:

  • Verwenden positive Winkel in eine Richtung zu drehen und negativ zu drehen in der entgegengesetzten Richtung (wenn die Winkel 180 sind, spielt das Zeichen keine Rolle).
  • Spielen Sie mit dem Wert von Geschwindigkeit und Dauer, um die Drehung schneller oder langsamer zu machen. (Ich musste die Dauer hinzufügen, damit es mit Quaternion.Lerp funktioniert).
  • Ich habe dies nicht getestet, also bin ich mir nicht sicher, ob es wie erwartet funktioniert.