Już miałem opublikować link do bloga Bazy Asteroid na temat wroga Walkera, gdy zauważyłem karmington już powiązany z artykułem Gamasutra w komentarzu.
Prawdopodobnie warto jednak dać trochę więcej wglądu i wyjaśnienia jako samodzielną odpowiedź.
Sztuką są rodzynki . Umożliwiają one skanowanie kodu wzdłuż linii w poszukiwaniu kolizji.
Aby Walker ładnie wyrównał się z powierzchnią, wystrzeliwują dwa promienie w dół, jeden z lewej strony Walkera i jeden z jego prawej strony (czerwone i żółte linie powyżej).
Z każdego obiektu RaycastHit2D można uzyskać normalny wektor skierowany prostopadle do powierzchni (magenta i zielone linie). Uśredniając wartości normalne z dwóch trafień, otrzymujesz odpowiednią orientację dla swojej postaci, która w rozsądny sposób odzwierciedla obszar leżący poniżej (niebieskozielona linia).
Możesz zastosować siłę w dół wzdłuż tej linii orientacji, aby utrzymać postać przyczepioną do terenu (chociaż może to powodować pewne przesuwanie się, jeśli tarcie jest niskie), lub ręcznie ustawić postać w punkcie przecięcia średniego promienia, tak jak to robi Walker.
Będziesz chciał stopniowo mieszać orientację postaci, aby Twoja postać nie wibrowała ani nie wyglądała na zrobotyzowaną (zobacz, jak normalnie zmienia się gwałtownie, gdy Walker przekroczy róg, ale ciało porusza się płynnie).
Jeśli masz ostre zakręty w terenie, prawdopodobnie zechcesz lekko skierować te promienie do wewnątrz - tak, że jeśli pająk przejdzie obok krawędzi klifu 90 stopni, zwisający promień uderzy w ścianę klifu.
Zespół Bazy Asteroid strzela również krótkim promieniem w kierunku ruchu Walkera (nie pokazano), który przesłania promień po tej stronie, jeśli trafi w teren. Dzięki temu chodzik nie utknie podczas wchodzenia w kąt wklęsły pod kątem 90 stopni.
Zgodnie z dokumentacją, raycast 2D różni się od 3D tym, że wykrywa zderzenia, w których zaczyna się promień. Dla mnie to brzmi podejrzanie, ale jeśli twoje testy to potwierdzą, będziesz chciał użyć maskowania warstwy, aby ograniczyć promienie, aby wykryć tylko zderzacze terenu.