Jump to content
Unity Insider Forum

GaOb an Collider laufen lassen + Rotation


Luca

Recommended Posts

Moin,

 

ich habe ein Problem was ich einfach nicht gelöst bekomme und wozu ich auch keine Hilfe im WWW finde :(

 

Und zwar möchte ich den Spieler an der "ecke" laufen lassen (siehe Bild). Mit den Sachen die ich ausprobiert habe dreht er sich zu schnell oder zu langsam so das er aus dem Sichtfeld wandert.

 

Nach Pfaden laufen fällt eigentlich weg da der Spieler spring. Wo ich auch keine vernünftige Lösung gefunden habe den pathfollower zu unterbrechen.

 

Ich hoffe ihr versteht wie ich das meine und könnt mir schnell weiter helfen. Es lässt mich einfach nicht schlafen :blink:

 

Ich danke schon mal im voraus für jede Hilfe.

post-6319-0-90919800-1487509242_thumb.png

Link zu diesem Kommentar
Auf anderen Seiten teilen

Wenn ich dein Problem richtig verstanden habe würde ich einfach einen Ray vom unteren Ende des Charakters aussenden und dann ne Kraft wirken lassen sobald man zu weit vom Boden entfernt ist, sodass du halt immer dran gezogen wirst.

Dein Charakter muss dazu natürlich gleichzeitig auch seine Ausrichtung ändern, sodass er immer orthogonal zum "Boden" steht.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Wenn ich dein Problem richtig verstanden habe würde ich einfach einen Ray vom unteren Ende des Charakters aussenden und dann ne Kraft wirken lassen sobald man zu weit vom Boden entfernt ist, sodass du halt immer dran gezogen wirst.

Dein Charakter muss dazu natürlich gleichzeitig auch seine Ausrichtung ändern, sodass er immer orthogonal zum "Boden" steht.

 

Ich hätte vllt noch sagen sollen das ich erst seit 3 Monaten in die Welt der Programmierung eingetaucht bin.

Und nicht alle Sachen kenne die Unity zu bieten hat.

 

Werde es jedoch gleich einmal ausprobieren.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich finde die Problembeschreibung etwas verwirrend/unklar. Vielleicht machst du mal ein kleines Video davon, solltest du es noch nicht gelöst haben.

 

Der Spieler soll einafch genau an der abgerundeten ecke entlang laufen und sich auch dementsprechend drehen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Da ist noch vieles unklar. Handelt es sich um ein 2D Spiel oder 3D Spiel? Arbeitest du mit der Physikengine oder ohne? Ist dein Spieler eine Kugel, die dann rollt wenn er sich vorwärts bewegt? Wie wird der Spieler generell gesteuert, mit CharakterController, mit Rigidbody + Controller etc.?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Da ist noch vieles unklar. Handelt es sich um ein 2D Spiel oder 3D Spiel? Arbeitest du mit der Physikengine oder ohne? Ist dein Spieler eine Kugel, die dann rollt wenn er sich vorwärts bewegt? Wie wird der Spieler generell gesteuert, mit CharakterController, mit Rigidbody + Controller etc.?

 

Okay. Also es ist ein 2D spiel. Alle Objekte sind Sprites. Der Spieler ist keine kugel und läuft ganz normal wie wir auch. Zurzeit läuft er mit Vector3.right und wenn das Objekt mit dem Boden kollidiert wird er gedreht und läuft dementsprechend nach oben. (was jedoch nicht richtig funktioniert da zu langsam oder zu schnell die Drehung ausgeführt wird) Der Spieler läuft automatisch immer gerade aus, mit einer Geschwindigkeit die bei bestimmten Aktionen variieren kann.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Mhh so langsam wird es klarer. Nun gilt es noch zu klären, was für eine Art von Schwerkraft (Gravitation) wirken soll. Soll die Schwerkraft immer von oben nach unten wirken oder wie "Life Is Good" es erwähnte, immer senkrecht Richtung Boden. Sollte es letzteres sein, dann kann man schon einmal festhalten, daß du die normale Physikengine bzw. Gravitation nicht verwenden kannst. Sollte es auf eine "normale" Gravitation hinauslaufen, wäre es am einfachsten die (2D) Physikengine zu verwenden. Wie auch immer, für beide Varianten solltest du dir einen Collider erzeugen der dem Shape der Ecke entspricht. Nur gegen diesen Collider kannst du einen Raycast senden und entsprechend "Life Is Good"-Idee's eine künstliche Schwerkraft erzeugen. Eine Möglichkeit der Umsetzung der künstlichen Schwerkraft wären auch 2 Collider, ein Collider beschreibt dabei die Kurve (d.h. den Pfad für den Spieler) und ein weiterer Collider beschreibt die Ausrichtung des Bodens (Wirkungsrichtung der Schwerkraft).

Für die Variante mit der Schwerkraft von oben nach unten brauchst du diesen Collider ebenfalls. Hier könntest du dich aber eben auf die Wirkung der Schwerkraft über einen Rigidbody verlassen, dem du deinem Spieler verpassen könntest.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Er läuft quasi die Wand hoch und dann an der Decke. Jetzt weiß ich was du mit physikengine meinst und kann sagen nein die fällt weg.

 

Ich kenne mich nicht genau mit Ray aus da ich hier das erste mal davon gehört habe. Ich habe es nur hinbekommen es zu einem bestimmten Vector zu machen aber nicht das es immer nach unten zeigt. Dennoch weiß ich nicht wie das gehen soll denn sobald er an die Kurve kommt müsste er sich ja drehen und ein Stück hoch bewegen. Oder hat ray auch einen minus Bereich?

 

Ich weiß leider nicht wie genau du das mit dem collider2D meinst. Mit OnTriggerStay etc. habe ich es schon versucht. Er dreht sich entweder zu schnell oder zu langsam.

 

Bei dem ganzen nicht zu vergessen wenn der Spieler über die Ecke springt muss es auch funktionieren.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Du brauchst dafür einen 2D-Collider (der deine Kurve beschreibt) und diese Funktion hier:

https://docs.unity3d...2D.Raycast.html

 

Den Raycast solltest du dabei immer in Richtung der Füsse des Spielers senden. Also von der lokalen Ausrichtung des Spielers aus nach unten, normal sollte das die negative lokale Y-Achse sein, also als Vektor:

-transform.up

 

Dieser 2D-Raycast sollten dann einen Treffer des aktuellen Bodens (2D-Colliders) zurückliefern:

https://docs.unity3d...ycastHit2D.html

 

Über den zurückgegebenen Normalenvektor des Treffers kannst du dann die Krümmung des Bodens ("Ecke") bestimmen und ebenfalls den Winkel (Rotation), den der Spieler gegenüber des Bodens (der Ecke) einnehmen muss. Zudem kannst du über diesen Normalenvektor eine Kraft berechnen, die den Spieler in Richtung des Bodens drückt.

 

Der 2D-Collider hilft dir übrigens auch dabei, daß der Spieler nicht durch den Boden hindurchgleitet. Dafür musst du allerdings deinen Spieler über einen 2D-Rigidbody bewegen (was ich auch empfehlen würde, die nach unten gerichtete Schwerkraft kann man hier ausschalten, aber Kollisionen mit anderen 2D-Collidern (z.b. Boden oder anderen Spielelementen) funktionieren so ohne zusätzlichen Skriptingaufwand):

https://docs.unity3d...igidbody2D.html

 

Dafür musst du allerdings deine Steuerung des Spielers auf eine Steuerung mit 2D-Rigidbody (+Controllerskript welches den RB steuert) umstellen. Damit würde sich dann die Physikengine um Kollisionen "kümmern". Ich würde allerdings empfehlen dir dafür einige Tutorials anzuschauen. Diese geben dir dann auch gleich einige gängige (Controller-)Skripte an die Hand

Link zu diesem Kommentar
Auf anderen Seiten teilen

Okay ich hatte jetzt wieder einen einigermaßen freien Kopf. Habe es dann soweit verstanden mit dem Ray.

 

Jedoch weiß ich nicht wie ich aus dem normal Vector eine Rotation erstellen soll. Ich habe zwar quasi mehrere x Punkte wo ich sagen kann rotiere jetzt um bsp. 2° jedoch funktioniert dies nicht.

 

Bei der Kraft kann ich doch einfach die Massi im rd2D erhöhen dann wir er automatisch ran gezogen?

 

Und ich weiß immer noch nicht in wie fern mir der Charr.Controller was bring da der spieler ja immer nur weiter in seine Blickrichtung läuft ohne das man etwas drücken muss. Das einzige was er tun muss ist springen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Um aus einem Vektor eine Rotation zu erstellen hilft diese Funktion:

transform.rotation = Quaternion.LookRotation(directionVector);

 

Eine höhere Masse des Rigidbodies2D führt nicht zu einer höheren Schwerkraft. Die Schwerkraft ist eine Einstellung in den Physics2DSettings. Die Defaulteinstellung wirkt dabei nur in Y-Richtung (Y -9.81 World).

 

Meinst du mit Char.Controller?:

https://docs.unity3d...Controller.html

 

Der bringt nur etwas, wenn man keinen Rigidbody2D verwendet und die Physikengine außen vor halten möchte. Zudem ist er eigentlich auf 3D ausgelegt. Der CC(3D) ist quasi ein spezieller Collider + Controller für die Steuerung Spielern. Über den CC kann man den Spieler dann bewegen und er reagiert auf andere Collider wie Boden oder Wände.

 

PS:

Schau dir mal das hier an:

https://unity3d.com/...ter-controllers

 

oder benutze diese Projekt, es enthält einen speziellen CC für 2D!

https://github.com/p...terController2D

 

PS2:

Formuliere falls du immer noch Probleme hast vielleicht noch einmal im Detail die Probleme neu und mache dann einen neuen Thread auf, dieser hier geht ein wenig unter.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

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

×
×
  • Neu erstellen...