Robię grę typu hack & slash i chcę, aby moje postacie poruszały się jak na przykład w Torchlight, Diablo itp. Obecnie generuję zestaw węzłów dla wszystkich możliwych do przejścia obszarów podłogi. Kiedy gdzieś klikam, gracz przechodzi tam interpolowaną ścieżką węzłów. To nie wygląda bardzo naturalnie. Gracz porusza się jak robot. Wrogowie używają również tego systemu węzłów do poruszania się i dzielą ten sam problem, ale mam z nimi jeszcze jeden problem. Kiedy wrogowie wykryją gracza, podążają do niego najkrótszą drogą. Czasami używają tej samej ścieżki i ustawiają się w linii do gracza zamiast go otaczać. Nie wiem, jak sprawić, by wrogowie wybierali różne ścieżki i otaczali gracza. Czy wiesz jak mogę rozwiązać te problemy? Może powinienem zastosować inne podejście do poruszania się postaci?
Moja obecna technika:
Zrzut ekranu pochodni:
---AKTUALIZACJA---
Chcę wiedzieć, jak radzić sobie z tymi sytuacjami:
Sytuacja 1, po drodze mam dynamiczne / statyczne przeszkody
Sytuacja 2, wrogowie mają tę samą ścieżkę do gracza (ustaw się w kolejce, aby z nami walczyć)
Odpowiedzi:
Zachowania sterujące w połączeniu ze strukturą danych nawigacyjnych .
Można to zrobić na wiele sposobów, ale to podstawowa koncepcja. Użycie siatki nawigacyjnej może być łatwiejsze, dzięki czemu można zastosować wyszukiwanie ścieżek w każdej wypukłej sekcji.
Jeśli jesteś zwolennikiem prowadzenia wykresu, możesz użyć zachowania Seek do każdego węzła na ścieżce, zamiast sztywno podążać ścieżką od węzła do węzła.
Inną metodą, którą możesz zastosować, jest Wygładzanie ścieżki, ale pamiętaj, że jest to dość kosztowne obliczeniowo.
Mam nadzieję, że to pomaga.
EDYTOWAĆ:
Aby pomóc w rozwiązywaniu problemów związanych z unikaniem przeszkód, użyj pewnego rodzaju omijania przeszkód .
źródło
Jeśli wolisz trzymać się nodegrapha zamiast przełączać się na siatkę nawigacyjną, jak sugerowali inni, możesz rozwiązać problem „ustawiania się do gracza zamiast otaczania go”, przypisując każdego wroga do ataku z określonego kierunku.
Jest wiele sposobów na osiągnięcie tego celu, ale zwykle używam systemu „żetonów”, aby przypisywać potworom unikalne kierunki, w których obiekt gracza posiada jeden żeton dla każdego kierunku (północ, północny wschód, wschód itp.). Kiedy wróg chce dotrzeć do gracza, musi najpierw zdobyć od niego żeton. Kierunek określony przez żeton informuje potwora, do której strony gracza może znaleźć ścieżkę. Ponieważ gracz ma tylko jeden żeton dla każdego kierunku, a potwory potrzebują żetonu, zanim będzie mógł zaatakować, wiele potworów nie wszystkie będą próbowały dotrzeć do tej samej strony gracza, co powinno nieco rozbić ich ścieżki.
Dodatkowo możesz również zastosować niewielką karę dla węzłów podczas procesu wyszukiwania ścieżek, aby zachęcić potwory do zbliżania się z kierunku zgodnego z posiadanym przez nich żetonem. (To znaczy, jeśli potwór ma token, który pozwala mu atakować ze wschodu, to w celu ustalenia „najkrótszej ścieżki” dla tego potwora, potraktuj wszystkie węzły ścieżki, które znajdują się na północ / zachód / południe od gracza, tak jakby to kilka węzłów zamiast jednego). To sprawi, że potwory szybciej się rozdzielą i spróbują flankować gracza, zamiast maszerować do gracza w jednym pliku i rozprzestrzeniać się dopiero na ostatnim etapie.
źródło
Zasadniczo dla wrogów, co chcesz zrobić, to znaleźć ścieżkę na poziomie makro (pomyśl o generowaniu obszarów wypukłych i ścieżek do obszaru, w którym znajduje się gracz), i wykonaj kilka zachowań w stylu boid na poziomie mikro (gdy jesteś już blisko do gracza).
Oto przykład zachowania boid: http://www.red3d.com/cwr/boids/
W przypadku odtwarzacza myślę, że pochodnia działa w poszukiwaniu ścieżki w siatce nawigacyjnej w miejscu kliknięcia / przeciągnięcia i działa całkiem dobrze. Może wydawać się nieco bardziej rozłączony niż bezpośrednia kontrola, ale prowadzi to do lepszych wyników dla gracza.
źródło
istnieje algorytm o nazwie rrt, który jest wykorzystywany do rozwiązywania problemów w świecie rzeczywistym. powierzchnia, po której może chodzić twój bohater (lub wrogowie), stanowi element wejściowy wraz z powierzchnią, na którą obiekty mogą się poruszać, a za pomocą algorytmu optymalizacyjnego znajduje ścieżkę do miejsca docelowego. o ile wiem, ten algorytm jest szeroko stosowany w ligach robocup. jest szybki, znajduje najkrótszą ścieżkę i pozwala uniknąć kolizji i ostrych zakrętów. możesz użyć tego programu PowerPoint, aby dowiedzieć się, jak generuje ścieżkę.
źródło
Aby trasy szukania ścieżek wyglądały bardziej „realistycznie”, sugeruję zapoznać się z artykułem o naturalnie wyglądającym A * w Gems Programming Game Vol.1
źródło