Jump to content
Unity Insider Forum

Player bleibt beim Drehen seiner Spur nicht treu


Maxe

Recommended Posts

Ich habe einen Player (in einer 3D Umgebung) mit CharacterControler erstellt. Die Animationen sind über RootMotion. Soweit funktioniert es ganz gut.

Wenn ich nun von links nach rechts laufe (egal ob x oder y Achse) wird der Player bei jeder Drehung (180°) ein klein wenig versetzt, er hält also nicht seine ursprüngliche Spur. Das hat zur Folge, dass bei 2D-Gameplay der Player nach kurzer Zeit im Hintergrund angekommen ist.

Hatte irgendwer dieses Problem schon einmal und kann mir auf die Sprünge helfen, ich habe keine Ahnung woran das liegen kann. Sorry, bin Anfänger und leicht am Verzweifeln.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Moin!

Hast du manchmal 2D-Gameplay und manchmal nicht? Denn wenn du nur 2D-Gameplay hast, solltest du auch 2D-Physik benutzen und entsprechend den Character Controller weglassen.

Davon abgesehen kannst du immer z.B. in LateUpdate einfach die Z-Koordinate des Objekts auf 0 setzen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich habe jetzt so etwas unter LateUpdate eingefügt:

Vector3 position = new Vector3(transform.position.x,transform.position.y,0);

Aber das bewirkt leider gar nichts. :-)

Zum Gameplay: Ich möchte ein 2D Spiel machen, aber mit 3D Objekten. Leider kommt mir dieses schreiben von Scripten dazwischen. Ich hatte dazu einen 2D-Controler mit Collider nachgebaut und habe dann ein 3D-Objekt eingesetzt, da meckerte Unity, dass sowas nicht geht. Also dachte ich, dass 3D-Objekte nur mit dem ganzen 3D-Zeugs (Collider3D etc.) funktioniert und habe an einem 3D-Controler-Script gebastelt, bei dem ich die "vertical" Bewegung deaktiviere und nur horizontale Bewegungen zulasse. Jetzt gibt es allerdings dieses Problem bei der Drehung.  

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 4 Stunden schrieb Maxe:

Aber das bewirkt leider gar nichts. 🙂

Nö, natürlich nicht - du hast einfach nur einen Vektor erstellt. Aber du fütterst diesen Vektor nicht wieder als Position in deine Figur hinein. Richtig wäre

transform.position = new Vector3( ... );

 

vor 4 Stunden schrieb Maxe:

Ich möchte ein 2D Spiel machen, aber mit 3D Objekten.

Dann empfehle ich trotzdem 2D-Physik. Die verträgt sich problemlos mit 3D-Grafik.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Erstmal vielen Danke für deine Korrektur, so funktioniert es tatsächlich. Sorry, aber ich habe bisher kaum Ahnung von Scripten.

Zu 2D:

Ich hatte vor ein paar Tagen (seit dem ich mich mit Unity beschäftige)  ein 2D Projekt angefangen. Dann ein Script (für die Bewegungen) benutzt und einen Rigidbody2D. Dann habe ich dem RB-2D ein 3D-Modell als Child unterschieben wollen, ging nicht. Wenn ich mich recht erinnere meinte Unity, dass im Script auf einen RB-2D bezuggenommen wird und das so nicht funktioniert.

Muss in dem Script dann ein RB-3D angesprochen werden wenn man ein 3D-Modell nimmt oder kann man einen RB-2D einfach mit einem 3D-Modell verbinden?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ok, dann werde ich das bei Gelegenheit probieren, vielleicht hatte ich da nur etwas falsch verstanden. Am Anfang ist das alles etwas überwältigend.

Welchen Vorteil hat die 2D-Physik gegenüber 3D-Physik. Wahrscheinlich ist es nicht ganz so rechenintensiv, schätze ich. Der 3D-Controler (Script) kommt bei mir langsam voran, 2D muss ich wieder bei null anfangen. Wenn ich meine Nerven frage sagen sie, dass ich jetzt gefälligst bei 3D bleiben soll und nicht schon wieder wechseln. Welche Pro`s gibt es?

Vielen Dank übrigens für deine sehr hilfreichen Antworten und deine Zeit.

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 1 Stunde schrieb Maxe:

Am Anfang ist das alles etwas überwältigend.

Das ist normal, keine Sorge :)

vor 2 Stunden schrieb Maxe:

Welchen Vorteil hat die 2D-Physik gegenüber 3D-Physik. Wahrscheinlich ist es nicht ganz so rechenintensiv, schätze ich.

Das vermutlich auch, aber nicht nennenswert. Es geht mehr darum, dass einfach weniger schief gehen kann. Wenn du einen 2D-Boden baust, dann wird dein 2D-Rigidbody da nicht durchfallen, wenn die Einstellungen stimmen. Wenn du aber einen 3D-Boden hast und einen 3D-Charakter obendrauf, dann kann die dritte Dimension dir einen Strich durch die Rechnung machen. Der Boden kann aus der 2D-Ebene herausgeschoben sein, oder die Oberfläche könnte etwas nach vorne oder hinten geneigt sein. Das wirkt sich dann vielleicht auf die Berechnung der Geschwindigkeit des Charakters aus. Prinzipiell musst du immer darauf achten, dass deine 3D-Collider nichts machen, was nicht genau 2D ist. Und bei 2D-Collidern kriegst du das halt gratis.

Die Umstellung auf 2D sollte eigentlich gar nicht mal so schwer sein. Halt Collider und Rigidbodys ersetzen und im Code dasselbe. Aber das Problem ist: Unity hat kein 2D-Äquivalent zum CharacterController. Da nimmst du dann vielleicht einen Rigidbody, der mit eigenen Problemen daher kommen kann. Hat z.B. kein Skin Width wie der CharacterController. Das wäre für dich auf jeden Fall ein Nachteil.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.

×
×
  • Neu erstellen...