Jump to content
Unity Insider Forum

Rotation wird nicht übernommen


Singular
 Share

Recommended Posts

Hallo zusammen, Hallo Sascha ;)

ich habe folgendes Problem: Ich möchte für die Raumstation, die der Spieler in meinem Spiel bauen kann einzelne Module erstellen, die angebaut werden können. Das ganze soll aber offen gehalten werden, dass der Spieler frei ist welches Modul wo hin kommt. Soweit so gut.

Ich habe dazu einzelne Module erstellt und habe ihnen ein EmptyGameObject zugewiesen, um dem Modul mitzuzeilen, wo die Verbindungspunkte sind, also wo weitere Module angeschlossen werden können.
Wird ein neues Modul erstellt, wird es als Child Object des Moduls an das es angeschlossen wird, Instanziiert. Darum habe ich in der StartMethode des Moduls folgenden simplen Code geschrieben:

    private void Start()
    {
        transform.localPosition = Offset;
        try
        {
            turnSpeed = GetComponentInParent<MainModule>().turnSpeed * -1;
            Vector3 rotation = GetComponentInParent<Transform>().localRotation.eulerAngles;
            Debug.Log(rotation);
            transform.rotation = Quaternion.Euler(rotation);

        }
        catch { }
    }

Das Problem ist die Zeile vor und nach dem Debug. Bzw müsste das Problem dort sein...
Das Parent Object hat als Rotation (0, 180, 0) und das wird mir im Debug auch so ausgegeben. Die Rotation, die das neue Modul aber dann annimmt ist die Rotation, die es vorher auch hatte. Das einzige, was passt ist die Position.

Dabei habe ich mittlerweile alle Kombinationen durch bezüglich transform.localRotation und transform.rotation.
Auch die möglichkeit Vector3 zu einem Quaternion zu machen straft mich mit dem selben Ergebniss.

Die Rotation wird in allen fällen 0 übernommen. Wenn das Object vorher eine rotation von (50,50,50) hatte, hat es nachher die selbe Rotation.

Was mache ich falsch?? Oder habe ich etwas komplett dämliches übersehen?

Link to comment
Share on other sites

Moin!

vor 2 Stunden schrieb Singular:

Hallo zusammen, Hallo Sascha ;)

 

Höhö :D

Also zuerst mal kannst du dir den Umweg über den Vector3 sparen. Du wandelst ein Quaterion in ein Vector3 um, nur um es dann wieder in das ursprüngliche Quaternion umzuwandeln. Vielleicht hast du das ja zur Veranschaulichung gemacht... aber nehmen wir es mal weg:

Quaternion rotation = GetComponentInParent<Transform>().localRotation;
transform.rotation = rotation;

Und dann verkürzen wir das:

transform.rotation = GetComponentInParent<Transform>().localRotation;

Dann sehen wir, dass du die lokale Rotation Rotation des Parents nimmst, und sie als globale Rotation übernimmst. Ich vermute, dass das so nicht intendiert ist.

Also eher:

transform.rotation = transform.parent.rotation;

 

  • Thanks 1
Link to comment
Share on other sites

Hallo Sascha, Danke dir. Da war irgendwo mein Fehler. Jetzt funktionierts wie es soll!

Wie gesagt mit Local und global war ich mir nicht sicher deswegen habe ich beides hin und her ausprobiert in allen möglichen kombinationen. Und das ich den Quaternion in einen V3 umwandle um ihn dann wieder zu einem Quaternion zu machen war diesem hin und her geschuldet, um zu schauen ob es vielleicht daran liegen könnte, dass er den Quaternion irgendwie anders überträgt. Aber wie gesagt, jetzt klappts. Danke dir. :D

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
 Share

×
×
  • Create New...