DEV Community

Cover image for Jak dodać listę znajomych do gry Unity?

Jak dodać listę znajomych do gry Unity?

Włączenie listy znajomych do gry Unity jest kluczowym aspektem promowania zaangażowania graczy. Pozwala ona graczom nawiązać bliższą więź z innymi graczami w grze, niezależnie od tego, czy są oni przyjaciółmi poza grą, czy też nawiązali bliską więź podczas intensywnego meczu.

Chociaż listy znajomych są istotną funkcją w tworzeniu angażującej społeczności, włączenie tych funkcji do projektu Unity jest łatwiej powiedzieć niż zrobić. Aby zacząć od zera, potrzeba wielu zasobów do zbudowania, utrzymania i skalowania, gdy liczba graczy rośnie. Na szczęście PubNub sprawił, że wprowadzanie funkcji czasu rzeczywistego do gier Unity jest łatwiejsze niż kiedykolwiek dzięki naszej platformie API czasu rzeczywistego o niskim opóźnieniu. Dbamy o warstwę infrastruktury aplikacji, dzięki czemu możesz skupić się na swojej aplikacji. Niezależnie od tego, czy tworzysz gry dla systemów Windows, Mac, iOS, Android, systemów rzeczywistości wirtualnej, takich jak Oculus i Meta Quest, czy też korzystasz z wielu platform, nasz Unity SDK zapewni Ci wszystko.

Jeśli chcesz zobaczyć przykład implementacji listy znajomych w grze Unity, aby wykorzystać go jako punkt odniesienia podczas korzystania z tego przewodnika, koniecznie sprawdź naszą grę pokazową Unity.

Kontynuuj czytanie, aby dowiedzieć się krok po kroku, jak dodać listę znajomych do gry Unity, aby dodawać, usuwać i wyświetlać statusy znajomych online w czasie rzeczywistym. Chociaż niniejszy przewodnik omawia dodawanie listy znajomych, tę samą architekturę można łatwo zastosować do list gildii, klanów i sojuszy. Zaczniesz od zrozumienia, jak skonfigurować obiekt PubNub GameObject, jak grupy kanałów tworzą listy znajomych, a na koniec dowiesz się, jak wdrożyć system dodawania znajomych.

Pierwsze kroki z PubNub

Zanim zaczniesz rozumieć, jak skonfigurować tablicę wyników i tabelę liderów dla swojej gry Unity, musisz zrozumieć PubNub i jak skonfigurować aplikację, aby korzystać z funkcji platformy.

Przegląd

PubNub opiera się na modelu Pub/Sub (publikuj/subskrybuj). Użytkownik publikuje wiadomość, która jest zasadniczo ładunkiem zawierającym wszystkie istotne informacje, w sieci PubNub. Użytkownicy, którzy chcą odebrać lub odsłuchać wiadomość i inne wygenerowane zdarzenia, subskrybują sieć PubNub i analizują wiadomość. Odsłuchiwacze zdarzeń służą do przechwytywania wiadomości i zdarzeń generowanych w sieci PubNub i wyzwalania ich na podstawie podjętych działań.

Aby zapewnić, że wiadomość dotrze do właściwych odbiorców, kanały są wykorzystywane jako mechanizm, za pośrednictwem którego dane są przesyłane z jednego urządzenia do drugiego. Kanały są wymagane za każdym razem, gdy urządzenie chce publikować i subskrybować sieć PubNub. Podczas gdy użytkownik może publikować tylko jedną wiadomość na raz, użytkownik może subskrybować wiele różnych kanałów na raz.

Instalacja i konfiguracja PubNub Unity SDK

Aby rozpocząć, musisz zainstalować wszelkie zależności PubNub i skonfigurować PubNub Unity SDK, aby połączyć swoją aplikację z siecią PubNub. Niniejszy przewodnik zakłada, że masz już zainstalowany Unity Game Engine, Unity Assets i edytory kodu, takie jak Visual Studio. Aby uzyskać szczegółowe informacje, zapoznaj się z dokumentacją Un ity SDK, ale jako przegląd, będziesz musiał:

  1. Dodać pakiet Unity za pośrednictwem Menedżera pakietów.
  2. Utworzyć bezpłatne konto PubNub i uzyskać klucze PubNub. Musisz włączyć funkcje w swoim zestawie kluczy, których potrzebuje twoja aplikacja. Na potrzeby tego przewodnika konieczne będzie włączenie funkcji Presence i Stream Controller z ustawieniami domyślnymi. Więcej informacji na temat różnych funkcji zestawu kluczy można znaleźć w naszych przewodnikach.
  3. Utwórz nowy projekt Unity lub otwórz istniejącą grę i podaj Unity klucze publikowania i subskrypcji uzyskane w poprzednim kroku, aby skonfigurować PubNub GameObject w edytorze Unity. Powinieneś również podać UserId, ponieważ każdy obiekt PubNub wymaga unikalnego identyfikatora w celu nawiązania połączenia z PubNub. Gdy to zrobisz, zainicjalizuj obiekt PubNub:
using PubnubApi;
using PubnubApi.Unity;

PubNub pubnub = new Pubnub(pnConfiguration);
Enter fullscreen mode Exit fullscreen mode
  1. Dodaj słuchacza zdarzeń dla swojej gry, aby reagować na wiadomości, gdzie twój back-end będzie zasadniczo otrzymywał powiadomienia o otrzymaniu nowych wiadomości. Istnieją różne detektory zdarzeń, aby móc zaimplementować niestandardową logikę reagowania na każdy typ wiadomości lub zdarzenia, ale w tym przewodniku będziesz potrzebować detektorów zdarzeń obecności i wiadomości:
var listener = new SubscribeCallbackListener();
pubnub.AddListener(listener);
listener.onPresence += OnPnPresence;
listener.onMessage += OnPnMessage;

// Handle Presence Events generated by the PubNub Network
private void OnPnPresence(Pubnub pn, PNPresenceEventResult result) {
    Debug.Log(result.Event);
}

// Handle Message Events generated by the PubNub Network.
private void OnPnMessage(Pubnub pn, PNMessageResult<object> result) {
    Debug.Log($"Message received: {result.Message}");
}
Enter fullscreen mode Exit fullscreen mode

Obecność jest używana do określania statusu online i niestandardowego statusu graczy w grze, gdzie PubNub generuje zdarzenia w celu dostarczania informacji o ich statusie w czasie rzeczywistym. Więcej informacji na temat implementacji obecności w grze Unity można znaleźć w naszym poradniku.

Tworzenie list znajomych

Zaczniesz od subskrybowania kanałów w celu otrzymywania zdarzeń obecności, które są zasadniczo powiadomieniami dla twojej gry za każdym razem, gdy znajomy gracza jest online. Ale skąd gracze mają wiedzieć, którzy gracze są ich znajomymi? Grupy kanałów są idealnym rozwiązaniem tego problemu.

Grupy kanałów

Grupy kanałów pozwalają zarządzać dużą, stałą liczbą kanałów jednocześnie. Grupy kanałów są zasadniczo wskaźnikiem do listy kanałów, które umożliwiają wysłanie pojedynczego wywołania subskrypcji dla maksymalnie 2000 kanałów na grupę kanałów. Grupy kanałów są unikalne dla identyfikatora użytkownika podłączonego do sieci, co oznacza, że można nadać grupie kanałów unikalną nazwę i powiązać ją z danym odtwarzaczem.

Oznacza to, że zamiast subskrybować unikalne kanały dla każdego użytkownika, można subskrybować grupę kanałów i otrzymywać informacje o obecności i innych zdarzeniach za każdym razem, gdy zmieni się status online lub niestandardowy gracza. Można więc myśleć o grupach kanałów i kanałach jako o listach (grupa kanałów) znajomych i członków (kanały), którymi można zarządzać i otrzymywać aktualizacje.

Konfigurowanie grup kanałów

W zależności od potrzeb twojej gry, będziesz potrzebował co najmniej dwóch grup kanałów, aby zaimplementować listę znajomych dla każdego gracza, z których każda będzie połączona z identyfikatorem użytkownika gracza w celu unikalnej identyfikacji. Należy pamiętać, że nazwy mogą być różne, więc należy postępować zgodnie z naszą dokumentacją dotyczącą konwencji nazewnictwa kanałów:

//receive presence updates, so you know when a player’s friends online or custom status changes.
string chanGroupFriendsStatus = $friends_status_ + {UserID} ;

// receive chat messages from friends
string chanGroupFriendsChat = $friends_chat_ + {UserID};
Enter fullscreen mode Exit fullscreen mode

Potrzebujesz dwóch grup kanałów, ponieważ chcesz odizolować zdarzenia obecności od innych zdarzeń, takich jak wiadomości czatu. Posiadanie tej samej grupy kanałów reprezentującej zarówno wiadomości, jak i kanały może powodować dużo niepotrzebnego ruchu. Chcesz odizolować zdarzenia tak bardzo, jak to możliwe, aby zapewnić większą elastyczność gry, która może zostać rozszerzona o więcej funkcji w przyszłości.

Jeśli nie zależy ci na zaimplementowaniu czatu ze znajomymi, potrzebujesz po prostu grupy kanałów statusu. Jeśli chcesz zaimplementować czat ze znajomymi, pamiętaj, że ten przewodnik będzie dotyczył architektury list znajomych, a nie konfigurowania systemu czatu dla twojej gry. Zapoznaj się z naszym przewodnikiem po czacie w czasie rzeczywistym, aby uzyskać więcej informacji na temat implementacji systemu czatu w Unity.

Każda grupa kanałów potrzebuje co najmniej jednego powiązanego z nią kanału. Można to rozwiązać, tworząc wzorzec kanału dla wszystkich graczy i łącząc identyfikator użytkownika gracza z nazwami kanałów, np:

string chanFriendStatus = $friends.presence. + {UserID};
string chanFriendChat = $friends.chat. + {UserID};
Enter fullscreen mode Exit fullscreen mode

A następnie dodając te dwa kanały do odpowiedniej grupy kanałów za pomocą interfejsu API grup kanałów. Należy to zrobić dla każdego gracza logującego się po raz pierwszy:

PNResult<PNChannelGroupsAddChannelResult> statusFriendsResponse= await pubnub.AddChannelsToChannelGroup()
  .ChannelGroup(chanGroupFriendsStatus )
  .Channels(new string[] {
    chanFriendStatus
  })
  .ExecuteAsync();
//Handle response

PNResult<PNChannelGroupsAddChannelResult> chatFriendsResponse= await pubnub.AddChannelsToChannelGroup()
  .ChannelGroup(chanGroupFriendsChat)
  .Channels(new string[] {
    chanFriendChat 
  })
  .ExecuteAsync();
//Handle response
Enter fullscreen mode Exit fullscreen mode

Ten sposób dodawania tych nazwanych kanałów do odpowiedniej grupy kanałów jest dokładnie taki sam, jak dodawanie i usuwanie znajomych z listy znajomych gracza, ale o tym później.

Nasłuchiwanie zdarzeń obecności i wiadomości: Subskrybuj

Mając już kanały i system grup kanałów, możesz teraz zasubskrybować sieć PubNub, która generuje zdarzenia obecności za każdym razem, gdy status gracza zmienia się i skutecznie pojawia się online.

Podobnie jak w przypadku subskrybowania kanałów, można bezpośrednio subskrybować grupy kanałów i otrzymywać zarówno zdarzenia obecności, jak i wiadomości z dowolnego kanału powiązanego z daną grupą kanałów. Zazwyczaj podczas subskrybowania możemy dołączyć parametr withPresence, aby SDK obsługiwało zarządzanie zarówno kanałami obecności, jak i nieobecności (więcej szczegółów na temat tego, co to oznacza, można znaleźć w naszym Przewodniku po obsłudze obecności dla Unity). Nie chcemy jednak tego robić dla naszej grupy kanałów chanGroupFriendsStatus, ponieważ chcemy, aby przechwytywane były tylko zdarzenia obecności, a nie żadne inne zdarzenia, takie jak wiadomości, aktualizacje metadanych itp. dla tego kanału.

Aby zaradzić tej sytuacji, można dodać -pnpres do chanGroupFriendsStatus. Oznacza to, że wszelkie zdarzenia dla tej grupy kanałów, w szczególności zdarzenia związane z obecnością, będą przechwytywane przez ustawiony wcześniej odbiornik zdarzeń związanych z obecnością. Co więcej, chanGroupFriendsChat nie będzie nasłuchiwać żadnych zdarzeń obecności i skupi się tylko na wiadomościach:

pubnub.Subscribe<string>()
  .ChannelGroups(new string[] {
    chanGroupFriendsStatus + -pnpres,
    chanGroupFriendsChat
  })
  .Execute();
Enter fullscreen mode Exit fullscreen mode

Wyślij wiadomość: Publikuj

Podczas gdy grupa kanałów chanGroupFriendsStatus jest gotowa do pracy, musisz skonfigurować wywołanie publikowania dla znajomego, aby móc wysłać wiadomość i aby każdy znajomy powiązany z jego grupą kanałów czatu znajomych otrzymał wiadomość.

Chociaż można subskrybować grupy kanałów, nie można do nich publikować. Zamiast tego należy opublikować wiadomość na kanale powiązanym z utworzoną wcześniej grupą kanałów:

PNResult<PNPublishResult> publishResponse = await pubnub.Publish()
  .Message(Hey friends, lets game?)
  .Channel(chanFriendChat)
  .ExecuteAsync();
  PNPublishResult publishResult = publishResponse.Result;
//Handle result
Enter fullscreen mode Exit fullscreen mode

Chociaż nie można publikować bezpośrednio do grup kanałów, gdy wiadomości są publikowane na dowolnym kanale w tej grupie kanałów, będą one odbierane przez program obsługi wiadomości słuchacza klienta. Oznacza to, że wszyscy znajomi powiązani z grupą kanałów otrzymają wiadomość.

Początkowe ładowanie gry

Gdy gracze początkowo się zalogują, należy wywołać usługę List Channels, aby wyświetlić listę wszystkich kanałów lub znajomych grupy kanałów:

PNResult<PNChannelGroupsAllChannelsResult> friendsListResult= await pubnub.ListChannelsForChannelGroup()
  .ChannelGroup(chanGroupFriendsStatus)
  .ExecuteAsync();
Enter fullscreen mode Exit fullscreen mode

Ta lista znajomych może być następnie wykorzystana do skonstruowania interfejsu użytkownika listy znajomych gracza, ponieważ można wyodrębnić identyfikatory użytkowników z tych kanałów (ponieważ sam utworzyłeś wzorzec). Jeśli istnieją metadane związane z tymi graczami, możesz następnie użyć identyfikatorów użytkowników z interfejsem API kontekstu aplikacji, aby uzyskać metadane dotyczące informacji o ich profilu, takich jak pseudonim, zdjęcie profilowe, notatki o nich itp.

Aby określić ich aktualny status online, wykonaj wywołanie HereNow, aby pobrać każdego użytkownika, który jest obecnie online, i porównaj z listą znajomych gracza:

pubnub.HereNow()
  .ChannelGroups(new String[]{ chanGroupFriendsStatus })
  .IncludeState(true)
  .IncludeUUIDs(true)
  .ExecuteAsync()
Enter fullscreen mode Exit fullscreen mode

Następnie możesz zaktualizować wskaźnik statusu online w interfejsie użytkownika listy znajomych, aby pokazać, że ci znajomi są online. Listener zdarzeń obecności, który skonfigurowaliśmy wcześniej, wykryje wszelkie zmiany statusu online i niestandardowego, a Ty możesz odpowiednio zaktualizować interfejs użytkownika listy znajomych gracza. Jak wspomniano wcześniej, wiadomości są również przechwytywane przez Message Event Listener i można je wyświetlać w unikalnym kolorze, który reprezentuje, że zostały wysłane z grupy znajomych.

Masz już prawie wszystko zaimplementowane w celu dodania listy znajomych do swojego systemu, ale jak gracze mogą zarządzać swoją listą znajomych?

Zarządzanie znajomymi: System dodawania znajomych

Jak pokazaliśmy wcześniej, aby dodać znajomych do grupy kanałów, można wywołać funkcję Dodaj kanały, aby dodać kanały do grupy kanałów. Może to zostać zainicjowane, gdy gracz kliknie przycisk, aby dodać kolejnego znajomego lub zaakceptuje zaproszenie od innego gracza.

Gracze mogą również usuwać znajomych z grupy znajomych, wywołując funkcję Usuń kanały i określając grupę kanałów i kanały. Czynność tę należy powtórzyć dla utworzonych wcześniej grup kanałów statusu i czatu. Możesz dołączyć przycisk, który inicjuje to wywołanie, przekazując identyfikator użytkownika i włączając go do utworzonego wcześniej wzorca kanału, aby usunąć go z grupy kanałów.

Chociaż można dodawać i usuwać znajomych w samej grze, zdecydowanie zalecamy, aby gracze nigdy nie mogli dodawać/usuwać kanałów do/z grup kanałów w samej grze. Gdy gracz chce dodać/usunąć znajomych, powinien wysłać żądanie do serwera zaplecza (może to być ten sam serwer, na którym użytkownik rejestruje konto), aby obsłużyć te żądania.

Ma to na celu zwiększenie bezpieczeństwa gry: nie chcesz, aby gracze, którzy nie są ze sobą przyjaciółmi, mieli dostęp do grupy znajomych gracza. Wdrożenie Access Managera, który jest administratorem uprawnień opartym na tokenach kryptograficznych, pozwala regulować dostęp klientów do zasobów PubNub.

Dzięki tej kontroli bezpieczeństwa na serwerze zaplecza można zaimplementować system, który odbiera zaproszenia do znajomych dla określonego gracza i przekazuje je do zamierzonego celu. Gracz decyduje się zaakceptować lub odrzucić prośbę, wysyłając zaproszenie z powrotem przez serwer zaplecza (chroniony przez Access Manager) i przesyłając je do pierwotnego nadawcy. Dzięki temu listy znajomych graczy są bezpieczne i dobrze zarządzane.

Co dalej

Z tego poradnika dowiedziałeś się, jak dodać listę znajomych do swojej gry Unity. Korzystając z grup kanałów i obecności, zaimplementowałeś system, w którym możesz zobaczyć zmiany statusu znajomych online / offline i niestandardowe za pomocą PubNub, a także podstawy dodawania i usuwania znajomych poprzez zabezpieczenie uprawnień za pomocą Menedżera dostępu.

Twórcy gier mogą dowiedzieć się więcej z poniższych zasobów:

W razie jakichkolwiek pytań lub wątpliwości zachęcamy do kontaktu z zespołem ds. relacji z deweloperami pod adresem devrel@pubnub.com.

Jak PubNub może ci pomóc?

Ten artykuł został pierwotnie opublikowany na PubNub.com

Nasza platforma pomaga programistom tworzyć, dostarczać i zarządzać interaktywnością w czasie rzeczywistym dla aplikacji internetowych, aplikacji mobilnych i urządzeń IoT.

Fundamentem naszej platformy jest największa w branży i najbardziej skalowalna sieć przesyłania wiadomości w czasie rzeczywistym. Dzięki ponad 15 punktom obecności na całym świecie obsługującym 800 milionów aktywnych użytkowników miesięcznie i niezawodności na poziomie 99,999%, nigdy nie będziesz musiał martwić się o przestoje, limity współbieżności lub jakiekolwiek opóźnienia spowodowane skokami ruchu.

Poznaj PubNub

Sprawdź Live Tour, aby zrozumieć podstawowe koncepcje każdej aplikacji opartej na PubNub w mniej niż 5 minut.

Rozpocznij konfigurację

Załóż konto PubNub, aby uzyskać natychmiastowy i bezpłatny dostęp do kluczy PubNub.

Rozpocznij

Dokumenty PubNub pozwolą Ci rozpocząć pracę, niezależnie od przypadku użycia lub zestawu SDK.

Top comments (0)