Jak śledzą zombie NPC w Left 4 Dead?
Mówię o NPCach, którzy po prostu wchodzą do ścian lub wędrują bez celu. Chociaż gracze ich nie widzą, są tam (powiedzmy w pokojach lub za drzwiami). Załóżmy, że w korytarzu i pokojach jest około 10 zombie. Czy gra utrzymuje wszystkie zombie na liście i iteruje poprzez wydawanie im poleceń? Czy odradzają się, gdy użytkownik znajduje się w określonym promieniu lub osiągnął specjalną lokalizację?
Powiedzmy, że umieściłeś 4 jednostki (kontrolowane przez graczy) w zupełnie różnych miejscach na mapie. Załóżmy, że nie jesteście rojowani, a następnie nie zabiliście żadnego z tych bezcelowych NPC. Czy gra śledziłaby w sumie 10 x 4 = 40 zombie?
A może moje zrozumienie jest całkowicie nieaktualne?
Powód, dla którego pytam, to czy miałbym zaimplementować coś podobnego na urządzeniu mobilnym, śledzenie 40 lub więcej postaci niezależnych może nie być świetnym pomysłem.
źródło
Odpowiedzi:
Interesuje Cię papier znaleziony tutaj:
Systemy AI Left 4 Dead
źródło
Nie przeczytałem artykułu, do którego ChrisE napisał link, ale albo z rozmowy, którą przeprowadziłem z pracownikiem Valve, albo gdzieś na jego Wiki Rozwoju (nie pamiętam, które) Pamiętam, że zostałem poinformowany, że w zasadzie mają tylko kilka prawdziwe byty (dyrektor AI); awatary przedstawiające zainfekowanych NPC są po prostu „marionetkami” dla tych istot. Zrobili to, aby ograniczyć liczbę wpisów edyktu (słownika jednostek) do minimum, ponieważ oczywiście jest mnóstwo zainfekowanych NPC do śledzenia.
Słownik encji silnika ma ustalony rozmiar i nie może się powiększać. Oznacza to, że każda gra zbudowana na tym silniku, która wymaga dużej liczby postaci niezależnych - lub jakiegokolwiek innego podmiotu w tym zakresie - musi korzystać z takiego systemu, aby silnik działał poprawnie, a nie dławił się (a ostatecznie powodował awarię), ponieważ liczba jednostek jest zbyt wysoka.
źródło
Nie mogę rozmawiać o tym, jak działa implementacja Left 4 Dead, ale mogę powiedzieć, jak bym to zrobił.
Wybrałbym coś w rodzaju drugiej opcji, śledziłbym każdego gracza i ładował NPC tylko wtedy, gdy gracze przechodzą obok punktów spustowych. Kluczem w takim systemie jest umieszczenie punktów wyzwalających wystarczająco daleko od gracza, aby nie byli w stanie powiązać tych
walking past this fence post
wyzwalaczythat car to blow up, and shoot a zombie at them.
Prawdopodobnie miałbym aktywną kolekcję NPC, której punkty spustowe albo dodają, albo usuwają NPC z kolekcji. Pozwala to wydawać zasoby CPU / GPU na postacie niezależne, z którymi gracze faktycznie wchodzą w interakcje, ale daje elastyczność w ładowaniu postaci niezależnych w dowolnym momencie.
Pomyśl o bossie, który słyszy dźwięki, być może boss jest załadowany na początku mapy, a jeśli gracz przechodzący przez mapę robi dużo hałasu (granaty, bomby rurowe itp.), Szef wyszuka gracza i zaatakuje nieoczekiwanie, zamiast czekać, aż gracz dotrze do areny bossów.
źródło