piątek, 25 marca 2016

Network Manager

Na początku przepraszam za dłuższą przerwę, ale ostatnio miałem mało czasu. Postaram się nadrobić te zaległości.

Dzisiaj zajmiemy się przekształcaniem gry w wersję multiplayer. Początkowo może dziwić, że zabieram się za to na tak wczesnym etapie tworzenia gry, ale im wcześniej się za to zabiorę, tym mniej fragmentów kodu trzeba będzie poprawiać. Jeśli tworzy się grę wyłącznie z myślą o trybie single player, a następnie daje się w niej połączenie między graczami, to w rozgrywce nic się nie zmieni - gracze nadal nie posiadaliby ze sobą żadnej interakcji. Działoby się tak dlatego, że napisany przez nas kod nie posiadałby w sobie żadnych poleceń wysyłanych z klienta na serwer i na odwrót.

NetworkManager

Na początku tworzymy na scenie pusty GameObject, klikamy na niego aby zobaczyć jego dane w inspektorze, a następnie dodajemy do niego dwa komponenty, znajdujące się w katalogu Network: NetworkManager i NetworkManagerHUD. Pierwszy z tych skryptów umożliwia nam korzystanie z nowych funkcjonalności Unity związanych z sieciami.



Pierwszą rzeczą którą nas interesuje są zmienne związane ze scenami. Zmienna OfflineScene określa na jakiej scenie będziemy się znajdować, jeśli nie będziemy połączeni z serwerem, a druga zmienna określa na jaką scenę mamy być wysłani, jeśli połączymy się z serwerem. Zazwyczaj rolę sceny offline pełni scena menu, a scena online jest sceną z właściwą grą, ale w przypadku niektórych gier scena z grą jest przypisana do obu tych zmiennych.

Nasze sceny powinny znajdować się w oknie projektu wraz z innymi assetami. Zazwyczaj aby przypisać asset do zmiennej w jakimś skrypcie wystarczy przeciągnąć go z okna projektu do interesującego nas skryptu. Sytuacja komplikuje się w przypadku scen, ponieważ najpierw muszą one być umieszczone w opcjach budowy projektu. Aby je tam wstawić należy wejść w File -> Build Settings..., a następnie dodać tam nasze sceny (co można dokonać np. przeciągając je z okna projektu). Teraz powinniśmy już być w stanie przypisać je także do NetworkManagera. Na razie nie mamy stworzonego żadnego ciekawego menu, więc leniwie przypiszemy tą samą scenę do obu zmiennych. Warto wiedzieć, że jeśli przechodzimy z jakiejś sceny do tej samej sceny, to następuje jej ponowne wczytanie.

Kolejną rzeczą wartą uwagi jest zmienna PlayerPrefab. Jeśli zaznaczymy opcję AutoCreatePlayer, to obiekt ten będzie automatycznie stworzony po podłączeniu się klienta do serwera. Odpowiednik tego obiektu jest tworzony także na wszystkich pozostałych klientach, ale każdy klient posiada autorytet tylko nad swoim własnym PlayerPrefabem i tylko z niego będzie mógł wysyłać polecenia na serwer. Jeśli klient się rozłączy, to jego PlayerPrefab zostanie automatycznie usunięty z serwera i pozostałych klientów.

Następnym interesującym nas elementem jest tablica prefabów RegisteredSpawnablePrefabs. Rozmiar tej tablicy możemy modyfikować za pomocą znaków + i -, a elementy możemy przeciągnąć z okna projektu. Dodanie prefabu do tej tablicy umożliwia nam używanie jego w funkcji Spawn, która powoduje utworzenie tego obiektu na wszystkich klientach. Tą tablicę będziemy stopniowo powiększali w trakcie tworzenia gry.

Skrypt NetworkManagerHUD tworzy w naszej grze proste menu umożliwiające tworzenie serwerów i dołączanie się do serwerów. Na początek takie proste menu powinno nam wystarczyć.

Brak komentarzy:

Prześlij komentarz