2016-08-07 22 views
-3

enter image description here2d Portal teleportieren Ausgabe

entnehmen Sie bitte die beigefügte Bild. Es gibt 3 Blöcke, die jeweils ein Portal haben, Portal ist Kind von Schwarz, jetzt gibt es rote Kugel, so wird der Ball das Portal und der Ball kommt aus einem anderen zwei Portal, ich möchte eine korrekte Position der Ballform das Portal, dass es herauskommt. Wenn der Ball zum Beispiel auf das Portal trifft, sollte der Ball aus einem anderen Portal am selben Trefferpunkt herauskommen.

dank

+4

Klingt Spaß. Hast du eine Frage? – JJJ

+0

hallo danke, Ja ich möchte den Ball richtig positionieren, wenn er aus einem anderen Portal kommt. – SmartPro123

+0

niemand hält Sie davon ab;) Was haben Sie bisher versucht und was läuft falsch mit Ihrem Ansatz? – TheDjentleman

Antwort

0

Sie sind nicht kümmern gedreht Portale nehmen, das ist, warum es funktioniert nicht ist.

jeweils Portale Unter der Annahme transform.right aus dem Portal zeigt, ist Vector.forward senkrecht zur 2D-Ebene und der Ball von portal1 geht zu portal2, könnten Sie so etwas wie folgt aus:
1. Berechnen des Vektor Vector3 v = ballhitPoint - portal1.transform.position
2. Bestimmen Sie die gerichtete Rotation zwischen portal1 und portal2: float r = (Mathf.Atan2(portal2.forward.y, portal2.forward.x) - Mathf.Atan2(portal1.forward.y, portal1.forward.x)) * 180/Mathf.PI
3. Drehen v um den gleichen Betrag vNew = Quaternion.AngleAxis(r, Vector3.forward)
4. Stellen Sie die Kugelposition redball.transform.position = portal2.transform.position + vNew

Zusammengefasst, was Sie erreichen wollen (wenn ich yo verstanden Ihr Problem ist richtig): Sie haben einen Hitpoint in einem Portal und möchten diesen Hitpoint auf ein Zielportal projizieren.

Ich habe diesen Code nicht getestet und weiß auch nicht, wie genau Sie 3D-Vektoren in Ihrem 2D-Spiel verwenden. Daher müssen Sie möglicherweise einige Berechnungen an Ihre Achse anpassen. Für weitere Informationen über die Funktionen, die ich verwendet habe, möchte ich die Unity-Dokumentation beziehen.