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.
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.