W MMORPG:
Czy przechowywanie współrzędnych każdego drzewa, krzewu skały itp. Po stronie serwera jest typowe czy wykonalne w celu wykrywania kolizji?
Jeśli tak, to jaki byłby możliwy sposób przechowywania tak dużej liczby współrzędnych (struktur danych itp., Obsługi problemów z wydajnością)?
Jeśli nie, to czy ten rodzaj wykrywania kolizji jest wykonywany całkowicie po stronie klienta, a serwer w ogóle nie sprawdza?
A może jest coś pośredniego, gdy klient sprawdza kolizję i serwer? Jeśli tak, to w jaki sposób serwer zweryfikowałby to samo bez zachowania współrzędnych na serwerze?
collision-detection
collision-resolution
mmo
server
Sajith Dilshan Jamal
źródło
źródło
Odpowiedzi:
Niezależnie od wykonalności (tak, w zależności od skali) często istnieją lepsze lub łatwiejsze sposoby.
Na przykład w typowej grze MMO serwer naprawdę musi wiedzieć tylko o zgrubnej mapie nawigacyjnej używanej przez sztuczną inteligencję i poszukiwaniu ścieżki gracza. Zamiast zapisywać położenie drzewa, możesz zamiast tego wyciąć dziurę w mapie nawigacyjnej w miejscu, w którym znajduje się drzewo. Podobnie w przypadku wszelkich innych dużych przeszkód.
Nawet gry wymagające bardziej dogłębnego wykrywania kolizji, często można podzielić to na wykrywanie po stronie serwera i klienta. Serwer może po prostu zająć się zgrubną ścieżką, podczas gdy klient obsługuje bardziej wrażliwe na animacje wykrywanie kolizji. Na przykład ranny gracz próbuje czołgać się po dużej skale, aby znaleźć kryjówkę przed wrogami. Serwer ustala, że gracz może poruszać się wzdłuż krawędzi skały (serwer nie ma pojęcia, że jest kamień, po prostu, że istnieje ścieżka, którą gracz może obrać obok niegodnego obszaru), podczas gdy klient wie, że kamień jest obecny i odtwarza animację postaci opartej na skale podczas spaceru. Pamiętaj, że klient się nie ruszaw tym przypadku postać lub wpływająca na nią rozgrywka; po prostu reaguje animacją na pobliskie obiekty.
Na pewno możesz przechowywać dużą liczbę obiektów na serwerze. Nie różni się niczym od żadnej gry z otwartym światem. Użyj dobrego schematu partycjonowania przestrzennego i zachowaj pamięć swoich obiektów tak lekką, jak to tylko możliwe. Pamiętaj, że w naszych głowach możemy mieć różne wersje „dużych liczb”: jeśli miałeś na myśli, że chciałbyś przechowywać każdy mały kamyk lub kamienisty guz w grze jako osobny obiekt, to jest po prostu głupie, nawet w przypadku gry dla jednego gracza . :)
źródło
Tak - jest to wykonalne. MMO często dzielą świat gry na wiele obszarów, ponieważ ułatwia to zadanie, ale nadal możesz to zrobić z 1 ogromnym obszarem - wystarczy użyć dobrego schematu podziału przestrzennego.
Ponieważ większość obiektów w MMO się nie porusza, możesz również wykonać wstępne przetwarzanie, w którym obiekty są używane do tworzenia drzew sprawdzających kolizję.
Ślad pamięci nie jest tutaj wielkim problemem, o ile korzystasz z instancji. Przechowywanie par liczb zmiennoprzecinkowych na obiekt to nic w wielkim schemacie rzeczy. Skromny komputer będzie miał obecnie 4 gigabajty, a przechowywanie pozycji to tylko 3 spławiki (lub 3 podwójne) - co z łatwością pozwoliłoby na przechowywanie kilku milionów przechowywanych obiektów w grze.
Przechowywanie rzeczy, takich jak zapasy dla każdego odtwarzacza, niewątpliwie zajmowałoby więcej danych - chociaż można je łatwo zapisać w pamięci podręcznej na dysku i załadować tylko wtedy, gdy gracz się zaloguje.
Będziesz potrzebował nadmiarowo sprawdzać kolizje zarówno na kliencie, jak i na serwerze, ponieważ pozwoli to klientowi bardziej reagować na środowisko. Jeśli gracz wejdzie w ścianę, chcesz, aby natychmiast przestał się poruszać - nie po pół sekundy, gdy serwer zareaguje.
Z serwera chcesz korzystać tylko do autorytatywnych rzeczy. Na przykład możesz wyszukiwać ścieżki tylko na kliencie, ponieważ nie możesz oszukiwać, wybierając mniej wydajną ścieżkę!
źródło