2016-03-20 7 views
1

Ich habe eine Kugel, die um den Punkt 0,0,0 in der Z-Achse dreht. Wenn die Leertaste gedrückt wird, muss der Ball in den großen Kreis gehen. Jetzt sieht mein Code so aus. Wenn Sie die Leertaste drücken, verhält sich der Ball nicht wie er sollte. Ich möchte wissen, wie man einen Ballon machen Sie genau nach untenUnity Move rotierenden Objekt

das ist, wie der Ball sich verhalten soll -> behavior image

mein Code:

void Update() { 
    if (Input.GetKeyDown (KeyCode.Space)) { 
     transform.position = new Vector3 (transform.position.x - 1, transform.position.y - 1, 0); 
    } else { 
     transform.RotateAround(new Vector3(0,0,0), new Vector3(0,0,1), 2); 
    } 
} 

Antwort

1

Ihr Code zu ‚springen‘ die Umlaufbahn doesn‘ t tun, was Sie wollen, weil Transform.RotateAround sowohl die Rotation als auch die Position der Transformation des Objekts ändert. Demonstration of how RotateAround modifies the transform

Also springt auf (Position - 1,1,0) in der Welt springt jedes Mal wild unterschiedliche Ergebnisse zurück.

Was wollen Sie stattdessen zu tun ist, um die (Vector) Richtung von der Entfernung zum Zentrum von Orbit Objekt berechnen (die Differenz), dann Skala, dass darauf an, wie weit wollen Sie es sich zu bewegen, dann gelten es auf die Position.

private Vector3 _orbitPos = Vector3.zero; 
private float _orbitAngle = 2f; 

private float _distanceToJump = 2f; 

void Update() 
{ 
    if (Input.GetKeyDown(KeyCode.Space)) 
    { 
     var difference = (_orbitPos - transform.position).normalized * _distanceToJump; 
     transform.Translate(difference); 
    } 

    transform.RotateAround(_orbitPos, Vector3.forward, _orbitAngle); 
} 

das Objekt zu umkreisen 2 Einheiten näher wenn Platz gedrückt wird sofort bewegt Dies wird.

Wenn Sie einen reibungslosen Übergang anstelle eines Sprungs haben wollten, schauen Sie sich Mathf.Lerp, Vector3.Lerp und die beteiligten Routinen an.

+0

Vielen Dank für diese informative Antwort. aber es funktioniert nicht. Ich habe transform.translate ohne weitere Berechnungen verwendet und es hat funktioniert. Ich wusste einfach nicht über diese Methode, da ich ein Anfänger bin in unity3d –

+0

Also welche Werte hast du transform.Translate() dann? Und diese Methode ist eine kleine Mathematik, nicht nur für die Einheit! –

+0

"Aber es funktioniert nicht." Aber ich versichere Ihnen, dass es so ist. Entweder haben Sie beim Transkribieren einen Fehler gemacht oder Ihre Frage erklärt nicht vollständig, was Sie wollten. –