Czy istnieje prosty sposób, aby zatrzymać wrogów stojących w tym samym miejscu?


24

Tak więc: gra z góry na dół, moi wrogowie gonią gracza, gdy znajdą się w pewnej odległości, stoją w miejscu i strzelają. Jeśli wszyscy zbliżają się z tego samego kierunku, wszyscy kończą w tym samym miejscu (tj. Stojąc „wewnątrz” siebie nawzajem), ponieważ obecnie nie wykrywam kolizji między wrogami - mogą się ominąć.

Jaki jest prosty sposób na obejście tego? Albo jakaś forma wykrywania kolizji, czy jakaś ai?


1
Ogranicz się do jednego wroga. : P
Kylotan,

Odpowiedzi:


18

Nie potrzebujesz wykrywania kolizji, ale będziesz musiał dać swoim wrogom odrobinę inteligencji i uniknąć wzajemnego zbliżania się. Wykrywanie kolizji bez tego sprawi, że twoi wrogowie i tak będą wyglądać głupio - ludzie unikają się, na ogół nie zderzają się.

Poszukaj „uciekających”, aby poznać niektóre proste zachowania.

Podstawową ideą jest to, że rzeczy powinny zmierzać w kierunku gracza, ale z dala od bliskiej przeszkody (siebie, ścian, tego rodzaju rzeczy).


6
Nazywa się to również boidami. Przeczytaj o prostych zasadach dotyczących boidów tutaj: en.wikipedia.org/wiki/Boids Wprowadzenie tych ograniczeń powinno być trywialne.
Nailer

12

Możesz zainspirować się zachowaniami uciekającymi , takimi jak Boids .

Zwykle składają się one z 3-4 bardzo prostych reguł, które właściwie zastosowane, skutkują bardzo satysfakcjonującymi i „złożonymi” zachowaniami.

W twoim przypadku możesz spróbować czegoś takiego:

  • Separacja (minimalne promienie między wrogami)
  • Spójność (więc podróżują w grupach)
  • Wyrównanie (więc mają tendencję do poruszania się w tym samym kierunku)
  • Celowane (powinny zmierzać w kierunku gracza)

To prawie dosłowna kopia odpowiedzi JasonD. Przysięgam, że nie spojrzałem na to przed opublikowaniem.
egarcia,


3

Być może zechcesz sprawdzić dyfuzję opartą na współpracy (tutaj świetne animacje) lub inny rodzaj wzoru przeciwdziałającego ruchom. Chociaż sam algorytm dyfuzji może nie powstrzymać wrogów przed przejściem, możesz dodać dodatkowe ograniczenia, aby uczynić to mało prawdopodobnym lub niemożliwym.


Pełne ujawnienie: całkiem pewne, że znalazłem link do rozpowszechniania tutaj gdzieś na GD, ale przez całe życie nie mogę znaleźć postu, który go teraz dotyczy. To było niezłe znalezisko. =)
leander

To jest super niesamowite, ale trochę bardziej skomplikowane, niż potrzebowałem. I tak przeczyta oficjalny dokument, ale udało się wdrożyć prostsze rozwiązanie.
Iain

2

Co jeśli nie możesz poruszać się po innych jednostkach? Wydaje mi się, że prędzej czy później będziesz go potrzebować. Ilekroć bieżąca ścieżka jest blokowana przez jednostkę, dostosuj ścieżkę, aby się nią poruszać.


2

Na stronie Craiga Reynolda można znaleźć odniesienia do zachowań związanych z kierowaniem i uciekaniem . Są względnie proste do wdrożenia, ale mogą wywoływać piękne, wschodzące zachowania.


Jest to zasadniczo ta sama odpowiedź, co pozostałe 2, ale +1 dla linku - ta strona jest naprawdę dobrym źródłem informacji.
AShelly,

1

Wszystkie pozostałe odpowiedzi dają lepszy wynik, ale najtańszym (?) Sposobem uniknięcia pełnego grupowania jest po prostu dodanie losowego wektora, który może być 25% oryginalnego obliczonego wektora ruchu, aby obiekty odbijały się nieco w ogólnej grupie kropel . Nie powstrzyma to całkowicie od siebie, ale w zależności od tego, co próbujesz osiągnąć, stwierdziłem, że może to być odpowiednie. Przedmioty mogą nadal grupować się za pomocą tej metody, jeśli będziesz je otaczać, ale z czasem będą się rozpraszać.

Oto mała gra, którą stworzyłem kilka lat temu, która demonstruje tę metodę: http://deleter.phatcode.net/index.php?page=projects&p=4


1

Ludzie zawsze przynoszą boidy, ponieważ daje to bardzo dobre wyniki, ale wdrażanie boidów może być przesadą w stosunku do konkretnego celu. W przeszłości osiągałem bardzo dobre wyniki, po prostu losując pozycję docelową w małym kółku.

Na przykład w przypadku wersji demonstracyjnej wbudowanej w Unity użyłem jej polecenia Random.insideUnitSphere, aby wykonać flokowanie dmuchawek


+1 Zgadzam się, kolejny przykład tej strategii (z pewną lepszą gwarancją nie nakładania się) można znaleźć tutaj: Jednostki „Unclutter” w grze RTS
MichaelHouse

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.