Unikanie przeszkód przez AI


#1

Poszukuje sposobu na to, żeby postać sterowana przez AI była w stanie omijać przeszkody. Próbowałem A* ale nie działa to najlepiej na dużych, proceduralnie generowanych mapach. Inny sposób który przyszedł mi do głowy to Raycasty ale tutaj jest problem znowu w tym, że AI bywa niesamowicie głupia (np raczej nie ma opcji żeby poradziła sobie sensownie z labiryntem).

Może powiem jakie elementy mam które myśle, że można wykorzystać jakoś:
-Mam zrobione pole widzenia postaci (jest w kształcie stożka, mogę ustalać bez problemu kąt widzenia i zasięg widzenia)
-Pole widzenia oczywiście jest blokowane przez odpowiednie przeszkody
-AI wie w którym kierunku i jak daleko znajduje się jej cel. Jest w stanie wyznaczyć też najbliższy punkt w zasięgu pola widzenia który jest najbliższy celowi.
-Wolałbym żeby AI nie “oszukiwała” tj nie posiadała informacji do których dostępu nie powinna mieć (wyjątkiem jest właśnie odległość od celu i kierunek w którym cel się znajduje)

Co prawda nadal mam kilka pomysłów (właśnie wygooglałem np. D* który wydaje się być ciekawy, inny pomysł to modyfikacja tych raycastów żeby w jakiś sposób system radził sobie z przeszkodami).

Jednak co mi troche nie pasuje w algorytmach wyszukiwania najkrótszej ścieżki to to, że jakby na to nie spojrzeć to jest to troche nienaturalne. My jako ludzie często nawet jeśli znamy dokładnie trase do jakiegoś miejsca to często nie jesteśmy w stanie określić czy krótsza jest trasa A czy trasa B. Mam przez to na myśli, że algorytm najkrótszej ścieżki jest zbyt… jakby… doskonały?

Jeszcze to co se pomyślałem to może te raycasty nie byłyby złe jakby AI robiłoby sobie własną wirtualną wersje “mapy”, może dałoby się też do tego dorzucić ten algorytm D*, tylko że wtedy chciałbym, żeby był jakiś system… “zapominania” aby nie doszło do sytuacji, że w pewnym momencie dla 100 różnych istot generuje się setki map przez co optymalizacja płakałaby i kwiczała.

Dodam jeszcze, że pracuje na unity ale to raczej nie ma zbyt dużego znaczenia (nie chodzi mi o skrypt a raczej o algorytm/sposób rozwiązania problemu)

Jeśli ktoś się nie zna aż tak akurat na tym a chciałby pomóc to też może, mianowicie może się myle i może jednak dużo lepiej będzie udostępnić AI informacje których nie powinno posiadać? Być może uważacie, że to zwiększa realizm? Lub może uważacie, że w realnym świecie też strasznie trudno nam poradzić sobie z labiryntem (zwłaszcza, jeśli nie patrzymy na niego z góry) w związku z tym problem można rozwiązać za pomocą prostych rayów?


#2

Wybór algorytmu wyszukiwania najkrótszej ścieżki to jedno.
Wybór momentu w którym powinien zostać wykorzystany to drugie.
Wybór ścieżki to trzecie :slight_smile:

Zależnie od tego co chcesz rozwiązać, zazwyczaj:

AI ożywia się i szuka ścieżki dopiero w jakimś sensownym zasięgu. Po co ma to robić jak gracz jej nie widzi lub ona nie ma prawa widzieć gracza?

AI można sztucznie ogłupić dodając losowość do ścieżki, którą wybrała. Można ją zmodyfikować lub np wybrać nieoptymalną- czemu nie?

AI czasem wykorzystuje optymalizacje (jeśli chodzi o moc obliczeniową). Dla przykładu jeden byt wybiera optymalną ścieżkę, a reszta podąża za nim (ostatnio zasłyszany patent z c&c)

To dość obszerny temat.

PS. Te algorytmy wyszukiwania nie powinny bazować na “pikselach” jako węzłach tylko na jakichś sensownych wartościach. Często gry rozstawiają “chorągwie” po planszy, które stanowią węzły grafu do algorytmu


#3

no właśnie ja za bardzo nie chce korzystać z algorytmu najkrótszej ścieżki tylko do omijania przeszkód XD + to ma być symulacja więc gracz będzie tam raczej wirtualny, a obiekty powinny działać aktywnie cały czas


#4

A czemu nie Nav Mesh ?