2017-01-05 3 views
0

Ich habe einen Kamera-Player in einer Szene. 3D-Szene mit 2D-Kompass-GUI. Die Szene enthält einen festen Norden, den ich auf meinem Kompass mit Nadel anzeigen möchte, aber wie kann ich das tun? Ich habe diesen Code mit einer Tutorial bisher versucht, aber meine Nadelbewegungsrichtung ist nicht passend zu meinem Norden.Einstellung Norden in GUI

public void ChangeNortDirection() { 

     northDirection.z = player.eulerAngles.y; 
     northLayer.localEulerAngles = northDirection; 

    } 

enter image description here

+0

Was genau ist falsch mit dem Kompass? Zeigt es in die falsche Richtung oder überhaupt nicht? – Mennolp

+0

es dreht sich, aber seine Richtung ist falsch. Es zeigt nicht auf den richtigen Norden –

+0

Ist das ein GameObject in der Szene nördlich fixiert oder hast du ein Kartenlayout wo du einen bestimmten Punkt als Norden haben willst? – Mennolp

Antwort

0

Nachdem ich das Tutorial angeschaut und gesehen habe, was Sie gemacht haben, kam ich auf eine Idee.

Das einzige Problem, das Sie haben, ist, dass der Zeiger nicht auf Norden, sondern auf etwas anderes schaut, während es noch mit dem Zeichen rotiert.

In Ihrem Fall können Sie einfach einen einfachen Wert hinzufügen, der den Anfangszustand des Kompasszeigers summiert. Der Kompasszeiger rotiert weiterhin mit der Y-Drehung, aber der Kompasszeiger zeigt in eine andere Richtung als normalerweise.

public float extraOffset; /* Edit this inside the editor on playmode until 
your pointer points towards your north. 
Then remember that value and set it while you are not in playmode.*/ 
public void ChangeNortDirection() { 

    northDirection.z = extraOffset + player.eulerAngles.y; // Just added the simple extraoffset variable and you are good to go. 
    northLayer.localEulerAngles = northDirection; 

} 

Denken Sie auch daran, Ihre Frage so gut wie möglich zu erklären, da es wirklich schwierig sein kann, für uns zu wissen, was genau das Problem ist. Zum Beispiel sagen Sie uns, ob Ihr Spiel wird 2D oder 3D und was die ursprüngliche Idee hinter dem Thema des Problems ist.

Hoffe, das hilft Ihnen ein wenig.

  • Mennolp
+0

Ich werde es versuchen, durch Hinzufügen von Offset aber FYI habe ich schon getan, indem Sie den Offset subtrahieren. Das Problem ist, dass wenn ich meinen Player von Norden nach Westen rotiere, meine Nadelrichtung sich entgegengesetzt bewegt. –

+0

Jedenfalls werde ich es mit positivem Offset versuchen –

+0

Es sollte nicht wirklich wichtig sein, ob der Offset negativ oder positiv ist, solange der Norden beim ersten Start gut ist, aber versuchen Sie dies, um die Zeigerdrehung umzukehren: northDirection.z = - (extraOffset + player.eulerAngles.y); – Mennolp

1

Sie sind die Nordrichtung auf der y-Achse des Spielers einstellen, so dass, wenn der Spieler die Nordrichtung so tut dreht.

Was Sie tun möchten, ist eine Variable, die die absolute Nordrichtung anzeigt und dann drehen Sie den Kompass in die entgegengesetzte Richtung, die der Spieler gedreht hat.

Eine andere Sache ist, ist dies in 2D oder 3D-Raum? In 2D möchten Sie die z-Achse immer nur drehen und nicht die x- und y-Achse berühren. Und in 3D sollte die Nordrichtung nur in der z-Achse definiert sein, so dass nur die x- und y-Ebene rotiert.

Für eine definitive Antwort geben Sie bitte weitere Informationen.

+0

Ich folgte dem Tutorial, das Richtung wie folgt eingestellt ist https://www.youtube.com/watch?v=urNuYkkbZCc –

+0

Ich bin viel verwirrt, um es zu folgen. Da meine Szene einen festen Norden hat und ich möchte nur einen Kompass zeigen, der in Richtung Norden zeigt –

+0

seine einzige 2D-Form, wie Sie das Bild in Frage –

0

Ich glaube, Ihre Frage zu den vorigen verwandt ist: das ist schön Sie mit Unity UI-System jetzt zu sehen (aber man Menschen über here ein bisschen Feedback gegeben haben könnte ihre Antworten/Kommentare)!

In Bezug auf Ihre aktuelle Frage ist eine der besten (und einfachsten) Lösung, die Vorwärtstransformation Ihres Spielers (blaue Achse in der Szenenansicht) zu erhalten und X und Z-Werte zu verwenden (Y spielt hier keine Rolle) der Winkel Sie wollen:

northLayer.localEulerAngles = new Vector3(0.0f, 0.0f, Mathf.Atan2(player.forward.x, player.forward.z) * Mathf.Rad2Deg);

Dieses Beispiel wird unter Berücksichtigung Ihrer northDirection Vektor ist 0,0,1 und Ihre northLayer zeigt nach Norden, wenn seine localEulerAngles.z-0 gesetzt ist (und natürlich auch, dass northLayer ist ein RectTransform Komponente).

Hoffe, das hilft,