Mam odgórną grę 2D, w której AI odradza się na krawędziach mapy i biegnę w kierunku centrum.
Używam A * i siatki węzłów do wyszukiwania ścieżek.
W tej chwili AI odradza się w punkcie na brzegu mapy i wszyscy podążają tą samą ścieżką, która jest najkrótszą drogą do centrum.
Teraz chcę, żeby były bardziej zaskakujące i interesujące i podążały różnymi ścieżkami.
Mogę od razu pomyśleć o dwóch pomysłach na zrobienie tego, ale chciałem wiedzieć, czy istnieją inne sposoby lub lepsze sposoby, z których ludzie często korzystają?
Gdy jeden wróg odrodzi się i wygeneruje ścieżkę do centrum, tymczasowo zwiększ koszty wszystkich węzłów na tej ścieżce, a następnie powoli zmniejszaj je z czasem. Wtedy wroga AI, która pojawi się później, będzie zmuszona obrać szerszą ścieżkę.
Powyższe podejście doprowadzi do tego, że sztuczna inteligencja pójdzie coraz szerszą ścieżką i nadal będzie bardzo przewidywalna. Pomyślałem więc, że wprowadzę również kilka pośrednich węzłów bramkowych na mapie. Kiedy AI odrodzi się, losowo wybierają jeden z pośrednich celów i kierują się tam najpierw, zanim udadzą się na środek mapy. Łącząc to z powyższym podejściem zwiększania kosztów może wyglądać całkiem dobrze?
Jakie podejścia ludzie uważają za najlepsze, aby sztuczna inteligencja zmieniała ścieżki, którymi podążają, wyglądała przekonująco i zaskakująco?
źródło
Pierwszym pomysłem jest dodanie małej losowej wartości do masy każdego węzła podczas wyszukiwania ścieżki. W ten sposób każdy agent będzie szukał ścieżki w nieco innym środowisku. Nie jestem pewien, czy to zadziała w twoim przypadku, ale powinno być naprawdę łatwe do wypróbowania.
źródło
Podoba mi się odpowiedź Neverminda , jednak biorąc pod uwagę ograniczenia opisane w komentarzach, chciałbym spróbować:
(distanceToGoal) + Max(0, desiredDistance - distanceTravelled))
.Spowodowałoby to, że jednostki spróbowałyby pójść dalej, co prawdopodobnie jest inną ścieżką, co skutkowałoby tym, że mogłyby pójść różnymi ścieżkami.
Możesz także dodać go do początkowej wartości dla każdej jednostki, ale losowy zasięg prawdopodobnie musiałby być nieco większy.
źródło
Jak wskazał Nick Wiggill, najprostszym podejściem byłoby uzyskanie okręgu otaczającego cel.
Ważną częścią jest wyeliminowanie wszystkich ścieżek w kręgu dla oryginalnego punktu, ponieważ prawdopodobnie trafilibyście do wrogów przechodzących przez koło, aby dostać się do ich początkowego punktu.
Z tego można uzyskać dowolny wariant, grając z wieloma wartościami, dodając dodatkowe punkty na okręgu w pobliżu początkowego itd.
źródło
Twoim problemem tutaj jest to, że A * jest algorytmem znajdującym najszybszą drogę do celu. Jeśli to są twoje główne kryteria „dobrej” ścieżki, nic dziwnego, że wszyscy twoi aktorzy podejmują te same decyzje.
Musisz zmodyfikować kryteria jakości ścieżki, aby „najkrótszy najlepszy” nie był jedynym czynnikiem. Element losowości jest w tym kluczowy, ale nie tak bardzo, że szkodzi inteligencji poszukiwania ścieżki (tzn. Aktorzy idą głupio okrężnymi ścieżkami do celu).
* Wyszukiwanie ścieżki jest z natury naiwne, ponieważ zwykle zakłada, że aktor ma doskonałą wiedzę na temat całej trasy, zanim zacznie. To zawsze będzie wyglądać nierealnie. Rozwiązanie sugeruje, że wybrane cele pośrednie są o krok od tego - AI stara się zbliżyć do celu, ale próbuje nawigować tylko w małych sekcjach naraz (jest to analogiczne do prawdziwego życia, w którym można nawigować tylko tak daleko) jak widzisz, a gdy przemierzasz więcej ścieżki, możesz widzieć dalej).
Być może poleciłbym prostszy sposób patrzenia na to. Kiedy szukasz ścieżki, nie utrzymuj tylko jednej najlepszej ścieżki, jaką do tej pory znalazłem. Zamiast tego zbierz zestaw najlepszych 5 lub 10 ścieżek. Użyj progu, aby odrzucić oczywiste wartości odstające. Np. Jeśli najlepsza ścieżka przemierza 20u, aby dostać się do celu, następne najlepsze trawersy 21u, a następne po niej - 50u. Ustaw próg o 20% większy niż najlepsza ścieżka, a więc odrzuć ścieżkę 50u, ponieważ jest ona głupio dłuższa. Teraz masz do wyboru kilka ścieżek i losowo wybierając z tego zestawu ścieżek, twoi aktorzy będą podejmować różne decyzje.
Jednak nie uzyskasz tego rodzaju informacji przy standardowym wyszukiwaniu A *, więc myślę, że będziesz musiał zmodyfikować algorytm lub użyć czegoś innego, aby zebrać zestaw możliwych ścieżek.
źródło
Jeśli masz niewielki zestaw powtarzających się wrogów (lub typów wrogów), możesz spróbować nadać im osobowości wpływające na ich ruchy. Nie muszą to być wielkie rzeczy, tylko rzeczy, które pojawiają się co jakiś czas. Dobrym przykładem tego są duchy z Pac-Mana. Niech Twoje A * zostanie podzielone na kilka celów pośrednich. Może jeden wróg jest naprawdę głupi i łatwo się gubi, kierując się w losowym kierunku co trzeci węzeł (inny niż bezpośrednio do tyłu). Bądź kreatywny.
źródło