DEV Community

Cover image for So fügen Sie Ihrem Unity-Spiel eine Freundesliste hinzu

So fügen Sie Ihrem Unity-Spiel eine Freundesliste hinzu

Die Einbindung einer Freundesliste in Ihr Unity-Spiel ist ein wichtiger Aspekt zur Förderung der Spielerbindung. Sie ermöglicht es Ihren Spielern, eine engere Verbindung zu anderen Spielern im Spiel aufzubauen, unabhängig davon, ob sie außerhalb des Spiels befreundet sind oder ob sie während eines intensiven Matches eine enge Bindung aufgebaut haben.

Freundeslisten sind zwar eine wichtige Funktion für die Schaffung einer ansprechenden Community, aber diese Funktionen in Ihr Unity-Projekt zu integrieren, ist leichter gesagt als getan. Wenn man bei Null anfängt, braucht man eine Menge Ressourcen, um sie zu erstellen, zu warten und zu skalieren, wenn die Spielerzahl steigt. Zum Glück hat PubNub es einfacher als je zuvor gemacht, Echtzeitfunktionen in Unity-Spiele einzubauen - mit unserer Echtzeit-API-Plattform mit niedriger Latenzzeit. Wir kümmern uns um die Infrastrukturebene Ihrer Anwendungen, damit Sie sich auf Ihre Anwendung konzentrieren können. Egal, ob Sie für Windows, Mac, iOS, Android, Virtual Reality-Systeme wie Oculus und Meta Quest oder plattformübergreifend entwickeln, unser Unity SDK deckt Sie ab.

Wenn Sie ein Beispiel für die Implementierung einer Freundesliste in einem Unity-Spiel sehen möchten, das Sie als Referenz verwenden können, wenn Sie dieser Anleitung folgen, schauen Sie sich unser Unity Showcase Game an.

Lesen Sie weiter, um Schritt für Schritt zu erfahren, wie Sie eine Freundesliste zu Ihrem Unity-Spiel hinzufügen, entfernen und den Online-Status von Freunden in Echtzeit anzeigen können. In dieser Anleitung geht es zwar um das Hinzufügen einer Freundesliste, aber dieselbe Architektur lässt sich leicht auf Gilden-, Clan- und Allianzlisten anwenden. Zu Beginn wird erklärt, wie das PubNub-GameObject konfiguriert wird, wie Channel-Gruppen Freundeslisten erstellen und wie ein Freundschaftssystem implementiert wird.

Erste Schritte mit PubNub

Bevor du verstehst, wie du ein Scoreboard und ein Leaderboard für dein Unity-Spiel einrichtest, musst du PubNub verstehen und wissen, wie du deine Anwendung so konfigurierst, dass du von den Funktionen der Plattform profitieren kannst.

Überblick

PubNub basiert auf dem Pub/Sub (Publish/Subscribe) Modell. Ein Benutzer veröffentlicht eine Nachricht, die im Wesentlichen eine Nutzlast ist, die alle relevanten Informationen enthält, im PubNub-Netzwerk. Benutzer, die die Nachricht und andere generierte Ereignisse empfangen oder anhören wollen, abonnieren das PubNub-Netzwerk und analysieren die Nachricht. Ereignis-Listener werden verwendet, um Nachrichten und Ereignisse, die im PubNub-Netzwerk generiert werden, abzufangen und basierend auf einer stattgefundenen Aktion auszulösen.

Um sicherzustellen, dass die Nachricht an die richtigen Empfänger gelangt, werden Kanäle als Mechanismus verwendet, über den die Daten von einem Gerät zum anderen übertragen werden. Kanäle werden jedes Mal benötigt, wenn ein Gerät im PubNub-Netzwerk veröffentlichen und abonnieren möchte. Während ein Benutzer jeweils nur eine Nachricht veröffentlichen kann, kann ein Benutzer viele verschiedene Kanäle gleichzeitig abonnieren.

Installieren und konfigurieren Sie das PubNub Unity SDK

Zu Beginn müssen Sie alle PubNub-Abhängigkeiten installieren und das PubNub Unity SDK konfigurieren, um Ihre Anwendung mit dem PubNub-Netzwerk zu verbinden. In dieser Anleitung wird davon ausgegangen, dass Sie die Unity Game Engine, Unity Assets und Code-Editoren wie Visual Studio bereits installiert haben. Bitte lesen Sie die Unity SDK-Dokumentation für alle Details, aber als Überblick müssen Sie Folgendes tun:

  1. Fügen Sie das Unity-Paket über den Paketmanager hinzu.
  2. Erstellen Sie ein kostenloses PubNub-Konto und erhalten Sie Ihre PubNub-Keys. Sie müssen die Funktionen Ihres Keysets aktivieren, die Ihre Anwendung benötigt. Für diese Anleitung müssen Sie Presence und Stream Controller mit den Standardeinstellungen aktivieren. Weitere Details zu den verschiedenen Funktionen deines Keysets kannst du in unseren Anleitungen nachlesen.
  3. Erstellen Sie ein neues Unity-Projekt oder öffnen Sie Ihr bestehendes Spiel und geben Sie Unity die Publish- und Subscribe-Keys, die Sie im vorherigen Schritt erhalten haben, um das PubNub GameObject im Unity-Editor zu konfigurieren. Du solltest auch eine UserId angeben, da jedes PubNub-Objekt einen eindeutigen Identifikator benötigt, um eine Verbindung zu PubNub herzustellen. Danach initialisieren Sie das PubNub-Objekt:
using PubnubApi;
using PubnubApi.Unity;

PubNub pubnub = new Pubnub(pnConfiguration);
Enter fullscreen mode Exit fullscreen mode
  1. Fügen Sie einen Ereignis-Listener für Ihr Spiel hinzu, um auf Nachrichten zu reagieren, wobei Ihr Backend im Wesentlichen Benachrichtigungen darüber erhält, wenn Sie neue Nachrichten erhalten. Es gibt verschiedene Event-Listener, mit denen du eigene Logik implementieren kannst, um auf jede Art von Nachricht oder Ereignis zu reagieren, aber für diesen Leitfaden benötigst du die Event-Listener Presence und Message:
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

Präsenz wird verwendet, um den Online- und benutzerdefinierten Status deiner Spieler in deinem Spiel zu bestimmen, wobei PubNub Ereignisse generiert, um Informationen über ihren Status in Echtzeit zu liefern. Mehr über die Implementierung von Präsenz in Ihrem Unity-Spiel erfahren Sie in unserer Anleitung.

Aufbau von Freundeslisten

Du beginnst damit, Kanäle zu abonnieren, um Präsenz-Ereignisse zu empfangen. Das sind im Wesentlichen Benachrichtigungen für dein Spiel, wenn ein Freund eines Spielers online ist. Aber woher wissen die Spieler, welche Spieler ihre Freunde sind? Channel-Gruppen sind die perfekte Lösung für dieses Problem.

Channel-Gruppen

MitChannel-Gruppen können Sie eine große, dauerhafte Anzahl von Channels gleichzeitig verwalten. Channel-Gruppen sind im Wesentlichen ein Verweis auf eine Liste von Channels, die es Ihnen ermöglichen, einen einzigen Subscribe-Aufruf für bis zu 2000 Channels pro Channel-Gruppe zu senden. Kanalgruppen sind für die Benutzer-ID, die mit dem Netzwerk verbunden ist, eindeutig, d. h. Sie können eine Kanalgruppe eindeutig benennen und an diesen Player gebunden sein.

Das bedeutet, dass Sie nicht für jeden Benutzer einzelne Kanäle abonnieren müssen, sondern eine Kanalgruppe abonnieren können und bei jeder Änderung des Online- oder benutzerdefinierten Status eines Players Anwesenheits- und andere Ereignisse erhalten. Sie können sich Channel-Gruppen und Channels als Listen (Channel-Gruppen) von Freunden und Mitgliedern (Channels) vorstellen, die Sie verwalten und über die Sie Updates erhalten können.

Einrichten von Channel-Gruppen

Je nach den Anforderungen Ihres Spiels benötigen Sie mindestens zwei Channel-Gruppen, um eine Freundesliste für jeden Spieler einzurichten, die jeweils mit der Benutzer-ID des Spielers verknüpft sind, um eindeutig identifiziert zu werden. Bitte beachten Sie, dass die Namen unterschiedlich sein können, halten Sie sich also an unsere Dokumentation zu den Channel-Namenskonventionen:

//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

Sie benötigen zwei Channel-Gruppen, da Sie Anwesenheitsereignisse von anderen Ereignissen, wie z. B. Chat-Nachrichten, isolieren möchten. Wenn ein und dieselbe Kanalgruppe sowohl für Nachrichten als auch für Kanäle steht, kann dies eine Menge unnötigen Datenverkehr verursachen. Sie möchten die Ereignisse so weit wie möglich voneinander trennen, damit Ihr Spiel in Zukunft flexibler mit weiteren Funktionen erweitert werden kann.

Wenn Sie den Freundes-Chat nicht einführen wollen, brauchen Sie nur die Statuskanalgruppe. Wenn Sie den Freundes-Chat implementieren möchten, beachten Sie bitte, dass sich diese Anleitung mit der Architektur von Freundeslisten befasst und nicht mit der Einrichtung des Chat-Systems für Ihr Spiel. Weitere Informationen zur Implementierung eines Chatsystems in Unity finden Sie in unserer Echtzeit-Chat-Anleitung.

Jede Channel Group braucht mindestens einen Channel, der mit ihr verbunden ist. Sie können dies lösen, indem Sie ein Channel-Muster für alle Spieler erstellen und die Benutzer-ID des Spielers an den Channel-Namen anhängen, z. B.:

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

Anschließend fügen Sie diese beiden Kanäle mithilfe der Kanalgruppen-API zu der entsprechenden Kanalgruppe hinzu. Sie würden dies für jeden Spieler tun, der sich zum ersten Mal anmeldet:

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

Diese Art des Hinzufügens dieser benannten Channels zur jeweiligen Channel-Gruppe entspricht genau dem Hinzufügen und Entfernen von Freunden aus der Freundesliste eines Spielers, aber dazu später mehr.

Auf Anwesenheits- und Nachrichtenereignisse achten: Abonnieren

Wenn du deine Channels und Channel-Gruppen eingerichtet hast, kannst du das PubNub-Netzwerk abonnieren, das Präsenz-Ereignisse generiert, wenn sich der Status eines Spielers ändert und er tatsächlich online ist.

Ähnlich wie beim Abonnieren von Channels können Sie Channel-Gruppen direkt abonnieren und sowohl Präsenz- als auch Nachrichtenereignisse von allen mit dieser Channel-Gruppe verbundenen Channels erhalten. Normalerweise können wir beim Abonnieren den withPresence-Parameter einfügen, damit das SDK sowohl die Präsenz- als auch die Nicht-Präsenz-Kanäle verwaltet (weitere Details dazu finden Sie in unserem Presence How-To Guide für Unity). Für unsere Kanalgruppe chanGroupFriendsStatus möchten wir dies jedoch nicht tun, da wir nur die Präsenz-Ereignisse abfangen möchten und keine anderen Ereignisse, wie Nachrichten, Metadaten-Updates usw., für diesen Kanal.

Um hier Abhilfe zu schaffen, können Sie -pnpres an den chanGroupFriendsStatus anhängen. Dies bedeutet, dass alle Ereignisse für diese Kanalgruppe, insbesondere Anwesenheitsereignisse, von dem zuvor eingerichteten Anwesenheitsereignis-Listener abgefangen werden. Außerdem hört der chanGroupFriendsChat nicht auf Präsenzereignisse und konzentriert sich nur auf Nachrichten:

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

Senden Sie eine Nachricht: Veröffentlichen

Während Ihre Kanalgruppe chanGroupFriendsStatus einsatzbereit ist, müssen Sie einen Veröffentlichungsaufruf für einen Freund einrichten, damit dieser eine Nachricht senden kann und jeder Freund, der mit seiner Kanalgruppe chanGroupFriendsChat verbunden ist, die Nachricht erhält.

Sie können zwar Kanalgruppen abonnieren, aber nicht in ihnen veröffentlichen. Stattdessen müssen Sie die Nachricht in einem Kanal veröffentlichen, der mit der Kanalgruppe verknüpft ist, die Sie zuvor eingerichtet haben:

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

Sie können zwar nicht direkt in Kanalgruppen veröffentlichen, aber wenn Nachrichten in einem der Kanäle dieser Kanalgruppe veröffentlicht werden, werden sie vom Nachrichten-Handler des Listeners des Clients empfangen. Dies bedeutet, dass alle Freunde, die mit der Kanalgruppe verbunden sind, die Nachricht erhalten.

Erstes Laden des Spiels

Wenn sich Spieler zum ersten Mal anmelden, müssen Sie den Dienst "List Channels " aufrufen, um alle Channels oder Freunde der Channel-Gruppe aufzulisten:

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

Diese Liste der Freunde kann dann verwendet werden, um die Benutzeroberfläche der Freundesliste des Spielers zu erstellen, da Sie die Benutzer-IDs aus diesen Channels extrahieren können (da Sie das Muster selbst erstellt haben). Wenn Metadaten zu diesen Spielern vorhanden sind, können Sie die Benutzer-IDs mit der App-Kontext-API verwenden, um Metadaten für ihre Profilinformationen zu erhalten, z. B. Spitzname, Profilbild, Notizen über sie usw.

Um den aktuellen Online-Status zu ermitteln, rufen Sie einen HereNow-Aufruf auf, um jeden Benutzer abzurufen, der derzeit online ist, und vergleichen Sie ihn mit der Freundesliste des Spielers:

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

Sie können dann die Online-Statusanzeige Ihrer Freundesliste aktualisieren, um anzuzeigen, dass diese Freunde online sind. Der Präsenzereignis-Listener, den wir zuvor eingerichtet haben, erkennt alle Online- und benutzerdefinierten Statusänderungen, und Sie können die Benutzeroberfläche der Freundesliste des Spielers entsprechend aktualisieren. Wie bereits erwähnt, werden auch Nachrichten vom Message Event Listener abgefangen, und Sie können sie in einer bestimmten Farbe anzeigen, die anzeigt, dass sie von der Freundesgruppe gesendet wurden.

Sie haben nun fast alles für das Hinzufügen einer Freundesliste in Ihr System implementiert, aber wie verwalten die Spieler ihre Freundesliste?

Freunde verwalten: Das Freundschaftssystem

Wie wir bereits gezeigt haben, können Sie, um Freunde zu einer Kanalgruppe hinzuzufügen, die Funktion Kanäle hinzufügen aufrufen, um Kanäle zu einer Kanalgruppe hinzuzufügen. Dies kann ausgelöst werden, wenn ein Spieler auf eine Schaltfläche zum Hinzufügen eines weiteren Freundes klickt oder eine Einladung eines anderen Spielers annimmt.

Spieler können auch Freunde aus der Freundesgruppe entfernen, indem sie die Funktion Channels entfernen aufrufen und die Channel-Gruppe und Channels angeben. Dies müssen Sie sowohl für die Status- als auch für die Chat-Kanalgruppen wiederholen, die Sie zuvor erstellt haben. Sie können eine Schaltfläche einfügen, die diesen Aufruf initiiert, indem Sie die Benutzer-ID übergeben und diese in das zuvor erstellte Kanalmuster aufnehmen, um sie aus der Kanalgruppe zu entfernen.

Obwohl Sie das Hinzufügen und Entfernen von Freunden in Ihrem Spiel selbst durchführen können, empfehlen wir dringend, dass Ihre Spieler niemals in der Lage sein sollten, innerhalb des Spiels selbst Kanäle zu einer Kanalgruppe hinzuzufügen bzw. aus einer Kanalgruppe zu entfernen. Wenn ein Spieler Freunde hinzufügen/entfernen möchte, sollte eine Anfrage an Ihren Back-End-Server gestellt werden (dies kann derselbe sein, der auch bei der Registrierung eines Benutzerkontos verwendet wird), um diese Anfragen zu bearbeiten.

Dies dient der Sicherheit Ihres Spiels: Sie wollen nicht, dass Spieler, die nicht miteinander befreundet sind, auf die Freundesgruppe eines Spielers zugreifen können. Mit dem Access Manager, einem kryptographischen Token-basierten Berechtigungsverwalter, können Sie den Zugang von Clients zu PubNub-Ressourcen regeln.

Mit dieser Sicherheitskontrolle auf dem Back-End-Server können Sie ein System implementieren, das Einladungen zu Freundschaftsanfragen für einen bestimmten Spieler empfängt und die Anfrage an das gewünschte Ziel weiterleitet. Der Spieler entscheidet, ob er die Anfrage annimmt oder ablehnt, und sendet die Einladung über Ihren Back-End-Server (der über Access Manager geschützt ist) zurück und leitet sie an den ursprünglichen Absender weiter. Dies gewährleistet, dass die Freundeslisten Ihrer Spieler sicher und gut verwaltet sind.

Wie geht's weiter?

In dieser Anleitung haben Sie gelernt, wie Sie eine Freundesliste zu Ihrem Unity-Spiel hinzufügen können. Unter Verwendung von Kanalgruppen und Präsenz haben Sie ein System implementiert, mit dem Sie die Online-/Offline- und benutzerdefinierten Statusänderungen von Freunden mithilfe von PubNub sehen können, sowie die Grundlage für das Hinzufügen und Entfernen von Freunden durch die Sicherung von Berechtigungen mit Access Manager.

Spieleentwickler können mit den folgenden Ressourcen mehr erfahren:

Bei Fragen oder Problemen können Sie sich jederzeit an das Developer Relations Team unter devrel@pubnub.com wenden.

Wie kann PubNub Ihnen helfen?

Dieser Artikel wurde ursprünglich auf PubNub.com veröffentlicht.

Unsere Plattform unterstützt Entwickler bei der Erstellung, Bereitstellung und Verwaltung von Echtzeit-Interaktivität für Webanwendungen, mobile Anwendungen und IoT-Geräte.

Die Grundlage unserer Plattform ist das größte und am besten skalierbare Echtzeit-Edge-Messaging-Netzwerk der Branche. Mit über 15 Points-of-Presence weltweit, die 800 Millionen monatlich aktive Nutzer unterstützen, und einer Zuverlässigkeit von 99,999 % müssen Sie sich keine Sorgen über Ausfälle, Gleichzeitigkeitsgrenzen oder Latenzprobleme aufgrund von Verkehrsspitzen machen.

PubNub erleben

Sehen Sie sich die Live Tour an, um in weniger als 5 Minuten die grundlegenden Konzepte hinter jeder PubNub-gestützten App zu verstehen

Einrichten

Melden Sie sich für einen PubNub-Account an und erhalten Sie sofort kostenlosen Zugang zu den PubNub-Schlüsseln

Beginnen Sie

Mit den PubNub-Dokumenten können Sie sofort loslegen, unabhängig von Ihrem Anwendungsfall oder SDK

Top comments (0)