Wie kann ich einen Charakter dazu bringen, auf Wänden zu gehen?

34

Ich versuche, einen Charakter dazu zu bringen, sich wie eine Spinne zu bewegen: Bei einem Anstieg, den ein Ball normalerweise nicht rollen kann, kriecht die Spinne langsam nach oben.

In ähnlicher Weise würde die Spinne bei einer rechteckigen Plattform in der Luft weiterlaufen, anstatt beim Erreichen der Kante herunterzufallen. Sie würde sich über die Kante wickeln und an der Seite und dann an der Unterseite der Plattform weiterlaufen (eventuell um den Umfang der Plattform herumgehen).

Ich habe mich mit wenig Erfolg mit verschiedenen Unity 2D-Komponenten befasst. :(

Die meisten Kollisionsgrenzen meiner Welt sind durch Collider-2D-Komponenten gekennzeichnet (die mit einem einfachen Ball, der von der Schwerkraft beeinflusst wird, gut funktionieren, mit diesem Spinnencharakter jedoch weniger).

Pyko
quelle
1
Dieses Spiel: youtube.com/watch?v=ga4Zqq1tXa8 ("Spider" auf PS1, ich habe es vor langer Zeit gespielt) könnte eine Quelle der Inspiration sein.
Tigrou

Antworten:

43

Ich wollte gerade einen Link zum Asteroid Base-Blog über den Walker-Feind veröffentlichen, als ich bemerkte, dass Karmington bereits in einem Kommentar mit dem Gamasutra-Artikel verlinkt war .

Es lohnt sich jedoch wahrscheinlich, dies als eigenständige Antwort etwas sichtbarer und verständlicher zu machen.

Ich gehe auf Sonnenschein, o-oh!

Der Trick ist Raycasts . Dadurch kann Ihr Code entlang einer Linie nach einer Kollision durchsucht werden.

Damit sich der Walker gut an den Oberflächen ausrichtet, feuern sie zwei Strahlen nach unten auf das Gelände, einen von der linken und einen von der rechten Seite des Walkers (rote und gelbe Linien oben).

Von jedem RaycastHit2D-Objekt können Sie einen normalen Vektor erhalten, der senkrecht zur Oberfläche zeigt (magentafarbene und grüne Linien). Durch Mittelung der Normalen aus den beiden Treffern erhalten Sie eine geeignete Orientierung für Ihren Charakter, die das zugrunde liegende Terrain (Cyan-Linie) angemessen widerspiegelt.

Sie können entlang dieser Ausrichtungslinie eine Kraft nach unten ausüben, um den Charakter im Gelände zu halten (obwohl dies bei geringer Reibung zu einem leichten Abrutschen führen kann), oder den Charakter manuell am durchschnittlichen Strahlschnittpunkt positionieren, wie dies mit dem Walker möglich ist.

Sie sollten die Ausrichtung des Charakters allmählich überblenden, um zu verhindern, dass Ihr Charakter vibriert oder roboterhaft aussieht (sehen Sie, wie sich die Normalität stark ändert, wenn der Walker die Ecke überquert, der Körper sich jedoch ruhig bewegt).

Wenn Sie scharfe Ecken in Ihrem Gelände haben, sollten Sie diese Strahlen wahrscheinlich leicht nach innen neigen. Wenn die Spinne also am Rand einer 90-Grad-Klippe vorbeigeht, trifft der überhängende Strahl die Klippenwand.

Das Asteroid Base-Team schießt auch einen kurzen Strahl in Richtung der Bewegung des Walkers (nicht gezeigt), der den Strahl auf dieser Seite außer Kraft setzt, wenn er auf das Gelände trifft. So bleibt der Läufer beim Betreten einer konkaven 90-Grad-Ecke nicht hängen.

Laut Dokumentation unterscheidet sich der 2D-Raycast von dem 3D-Raycast darin, dass er Kollider erkennt, innerhalb derer der Strahl beginnt. Das klingt für mich faul, aber wenn Ihre Tests dies bestätigen, sollten Sie eine Ebenenmaske verwenden, um die Strahlen zu begrenzen und nur kletterbare Geländecollider zu erkennen.

DMGregory
quelle
Ich kann bestätigen, dass 2D-Raycasts Kollider erkennen, die den Ausgangspunkt des Raycasts enthalten. Dies kann jedoch leicht gefiltert werden, da diese erste Erkennung immer mit einem Abstand von 0 und einer Normalen entgegen der Richtung des Raycasts zurückgegeben wird.
XenoRo
2

Sie benötigen hierfür benutzerdefinierten Code.

Grundsätzlich müssen Sie wissen, was das nächste Objekt ist, wie die betreffende Plattform, und dann die nächstgelegene Kante und den nächstgelegenen Punkt auf dieser Kante finden und dann die Position und Drehung der Spinne von dort aus berechnen.

Es wird nicht leicht sein, es wirklich schön zu machen, aber es sollte eine gute Herausforderung sein, es überhaupt zum Laufen zu bringen.

Karmington
quelle
2
Hier ist ein wirklich netter Link, nicht sicher, ob er genau zu Ihrem Fall passt, aber vielleicht ... gamasutra.com/blogs/AdamWinkels/20140220/211306/…
karmington