Jak stworzyć postać zdolną do chodzenia po ścianach?


34

Staram się, aby postać poruszała się jak pająk: biorąc pod uwagę wznoszące się nachylenie, którego piłka normalnie nie byłaby w stanie zwinąć, pająk powoli czołgałby się w górę.

Podobnie, biorąc pod uwagę prostokątną platformę w powietrzu, zamiast spadać po osiągnięciu krawędzi, pająk kontynuowałby, owijając się nad krawędzią i kontynuując w dół po bokach, a następnie pod spodem platformy (ostatecznie przechodząc wokół obwodu platformy).

Z małym powodzeniem przyjrzałem się różnym komponentom Unity 2D. :(

Większość granic kolizji mojego świata jest oznaczonych komponentami Collider 2D (które świetnie działają z prostą piłką poddaną grawitacji, ale mniej z tą postacią pająka).


1
Ta gra: youtube.com/watch?v=ga4Zqq1tXa8 („Spider” na PS1, w którą grałem już dawno) może być źródłem inspiracji.
tigrou

Odpowiedzi:


43

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

Idę na promień słońca, o-och!

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


Mogę potwierdzić, że 2D rodycasty wykryją zderzaki, które zawierają punkt początkowy raycasta. Można to jednak łatwo przefiltrować, ponieważ to pierwsze wykrycie jest zawsze zwracane z odległością 0 i normalnym przeciwieństwem kierunku raycast.
XenoRo

2

Będziesz potrzebował do tego niestandardowego kodu.

Zasadniczo musisz wiedzieć, jaki jest najbliższy obiekt, na przykład omawianą platformę, a następnie znaleźć najbliższą krawędź i najbliższy punkt na tej krawędzi, a następnie obliczyć pozycję pająka i stamtąd.

Sprawienie, by było naprawdę przyjemne, nie będzie łatwe, ale powinno być dobrym wyzwaniem, aby w ogóle działało.


2
Oto naprawdę fajny link, nie jestem pewien, czy dokładnie pasuje do twojej sprawy, ale może może ... gamasutra.com/blogs/AdamWinkels/20140220/211306/…
karmington
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.