Tworzenie gry w C# z użyciem silnika Ogre - cz.8
28.10.2011 - Mateusz Osowski
![]() ![]() W kolejnej, ósmej już części tego kursu, zaczniemy uczyć bohaterów niezależnych czegoś o otaczającym ich świecie. Poznamy metody pozwalające kierować postać przez labirynty. Posłuży nam do tego algorytm wyszukiwania ścieżek A-Star.
[Część 7] [Część 8] Reprezentacja mapy Graf, po którego krawędziach poruszają się postacie, jest najczęściej spotykaną reprezentacją dostępności terenu. Stosowany jest w grach do dnia dzisiejszego. Niewątpliwą zaletą takiej reprezentacji jest prostota i niskie zapotrzebowanie na zasoby.
Graf nawigacyjny w grze Gothic, źródło: Link A-StarA-Star to algorytm oparty na znanej metodzie Dijkstry, wykorzystywany w przypadkach, gdy możemy na grafie wprowadzić dodatkową miarę odległości (potraktowanie wierzchołków jako punktów w przestrzeni temu odpowiada). Kroki algorytmu A-Star Oznaczenia: G - graf
W poniższej aplikacji możemy zobaczyć, które węzły i w jakiej kolejności są odwiedzane przez algorytm: Nanosząc powstały graf na mapkę w grze, damy postaciom możliwość poruszania się pomiędzy określonymi wierzchołkami grafu. Zauważmy jednak, że postać rzadko znajduje się na którymś z wierzchołków. Aby algorytm zadziałał, możemy dodać nową krawędź, łączącą postać z najbliższym dostępnym wierzchołkiem grafu. Po zastosowaniu takiego rozwiązania postacie potrafiłyby co prawda poruszać się po świecie i (przy dobrze stworzonym grafie) ich trasy wyglądałyby przekonująco. Jednak informacja o terenie, niesiona przez taką strukturę, ogranicza się do pewnego zbioru odcinków. Gdyby coś stanęło na krawędzi grafu, wówczas postać musiałaby zostać oznaczona jako niedostępna i algorytm musiałby znaleźć inną trasę. Postać mogłaby też się zatrzymać i czekać lub taranować przeszkodę. Byłoby to całkiem pożądane zachowanie, w przypadku wąskich korytarzy, lecz co, gdy coś zablokuje krawędź grafu w otwartej przestrzeni? Ponadto musimy jeszcze pamiętać o systemie sztucznej inteligencji, który musi sobie radzić z poruszaniem w trakcie dynamicznych sytuacji, np. walki. W przypadku braku dokładniejszych informacji o terenie wokół postaci, często tworzy się ogromną liczbę dobrze rozmieszczonych wierzchołków grafu. Z punktu widzenia projektanta map, rozwiązanie takie wymaga sporego wysiłku. Od strony programistycznej, nawigację w dynamicznych sytuacjach można ratować za pomocą rzucania promieni na siatkę kolizyjną (swoiste "czułki" postaci). Pozwala to, w miarę dokładnie, poruszać się po terenie nieobjętym wierzchołkami grafu i unikać np. ścian. Może to jednak doprowadzić do sytuacji, w których postać nie będzie potrafiła wrócić do grafu w prosty sposób.
Rozwiązaniem będzie dostarczenie innego typu informacji. W tym celu użyjemy techniki siatek nawigacyjnych (NavMesh). Każdy, kto tworzył mody do nowszych gier, z pewnością już się z nią zetknął. Technika ta zaczęła być powszechnie stosowana stosunkowo niedawno z uwagi na skupienie głównego nurtu wokół polepszania grafiki i faktu, że rozwiązanie oparte o sam graf jakoś się sprawdzało.
|
Copyright © 2008-2010 Wrocławski Portal Informatyczny
design: rafalpolito.com