2016-08-02 19 views
0

Ich habe zwei GameObjects, sphereOne und sphereTwo als Kinder eines leeren gameObject both.Wie man ein GameObject um ein anderes GameObject in Unity in der rotierenden Ebene dreht

Ich habe diese C# -Code zu einem

sphereTwo angebracht
void Update() 
    { 
    transform.RotateAround(sphereOne.transform.position, new Vector3(0, 1, 0), 100*Time.deltaTime); 
    } 

Diese sphereTwo um sphereOne drehen lässt.

Wenn ich das übergeordnete Spielobjekt both rotiere, dreht es sich nur auf dieser bestimmten Ebene.

enter image description here

Wie aktualisiere ich die dynamisch Position der rotierenden Kugel verwandeln, so dass sie auf der gleichen Ebene wie die Rotation des Mutter Objekt liegt?

+0

Setzen Sie den Positionsvektor in Bezug auf die richtige Ebene auf den des übergeordneten Elements? –

+0

Das Geheimnis hier ist, Sie haben ein leeres Spielobjekt (oft als "Marker" bezeichnet), die die Dinge "hält". – Fattie

+0

Mögliches Duplikat von [Schwierigkeit mit rotierendem Kind um die übergeordneten Achsen] (http://stackoverflow.com/questions/37753519/difficulty-with-rotating-child-around-parent-axes) – Fattie

Antwort

4

Der zweite Parameter in Transform.RotateAround() ist die Achse, die die Orientierung der Ebene sphereTwo dreht um sphereOne dreht. Im Moment haben Sie dies auf einen statischen Wert von new Vector3(0, 1, 0) eingestellt, im Grunde der weltweit höchste Vektor.

die Achse zu haben, anstatt sich auf die Ausrichtung von sphereOne basieren, verwenden seine Transform.up Vektor statt - dies wird auf dem Weltraumdrehung von sphereOne basierend ändern ‚s Transformation:

void Update() 
{ 
    transform.RotateAround(sphereOne.transform.position, sphereOne.transform.up, 100*Time.deltaTime); 
} 

(Sie könnten wahrscheinlich alternativ both.transform.up, je nach Situation.)

Hoffe, das hilft! Lass es mich wissen, wenn du irgendwelche Fragen hast.

+0

das ist alles wahr, aber das OP muss lernen wie man Transformationen zusammenstellt, um so etwas zu erreichen! – Fattie