Comment ajouter une liste d'amis à votre jeu Unity ?
Published: 2024-05-15 14:47:17

L'intégration d'une liste d'amis dans votre jeu Unity est un aspect essentiel de la promotion de l'engagement des joueurs. Elle permet à vos joueurs de créer un lien plus étroit avec d'autres joueurs dans le jeu, qu'ils soient amis en dehors du jeu ou qu'ils aient tissé des liens étroits au cours d'un match intense.

Bien que les listes d'amis soient un élément essentiel à la création d'une communauté attrayante, il est plus facile de les intégrer à votre projet Unity. En partant de zéro, il faut beaucoup de ressources pour construire, maintenir et faire évoluer la liste lorsque le nombre de joueurs augmente. Heureusement, PubNub a rendu plus facile que jamais l'injection de fonctionnalités en temps réel dans les jeux Unity grâce à notre plateforme API en temps réel et à faible latence. Nous nous occupons de la couche d'infrastructure de vos applications afin que vous puissiez vous concentrer sur votre application. Que vous développiez pour Windows, Mac, iOS, Android, des systèmes de réalité virtuelle tels qu'Oculus et Meta Quest, ou que vous soyez multiplateforme, notre [SDK Unity](https://www.pubnub.com/docs/sdks/unity?utm_source=medium&utm_medium=syndication&utm_campaign=off_domain&utm_content=fr) vous couvre.

Si vous souhaitez voir un exemple d'implémentation d'une liste d'amis dans un jeu Unity, qui vous servira de référence pour suivre ce guide, n'hésitez pas à consulter notre [jeu de démonstration Unity](https://github.com/PubNubDevelopers/unity-multiplayer-shooter).

Poursuivez votre lecture pour apprendre, étape par étape, comment ajouter une liste d'amis à votre jeu Unity afin d'ajouter, de supprimer et de voir les statuts en ligne de vos amis en temps réel. Ce guide traite de l'ajout d'une liste d'amis, mais la même architecture peut facilement s'appliquer aux listes de guildes, de clans et d'alliances. Vous commencerez par comprendre comment configurer le GameObject PubNub, comment les Channel Groups architecturent les listes d'amis, et enfin vous apprendrez à mettre en place un système d'amis.

Premiers pas avec PubNub
------------------------

Avant de commencer à comprendre comment mettre en place un scoreboard et un leaderboard pour votre jeu Unity, vous devez comprendre PubNub et comment configurer votre application pour tirer parti des fonctionnalités de la plateforme.

### Vue d'ensemble

PubNub est basé sur le modèle Pub/Sub (Publier/S'abonner). Un utilisateur [publie](https://www.pubnub.com/docs/general/messages/publish?utm_source=medium&utm_medium=syndication&utm_campaign=off_domain&utm_content=fr) un message, qui est essentiellement une charge utile contenant toutes les informations pertinentes, sur le réseau PubNub. Les utilisateurs qui souhaitent recevoir ou écouter le message et d'autres événements générés s'[abonneront](https://www.pubnub.com/docs/general/messages/receive?utm_source=medium&utm_medium=syndication&utm_campaign=off_domain&utm_content=fr) au réseau PubNub et analyseront le message. Les [auditeurs d'événements](https://www.pubnub.com/docs/general/messages/receive#add-a-listener?utm_source=medium&utm_medium=syndication&utm_campaign=off_domain&utm_content=fr) sont utilisés pour capter les messages et les événements générés dans le réseau PubNub et se déclenchent en fonction d'une action effectuée.

Pour que le message parvienne aux bons destinataires, des [canaux](https://www.pubnub.com/docs/general/channels/overview?utm_source=medium&utm_medium=syndication&utm_campaign=off_domain&utm_content=fr) sont utilisés comme mécanisme de transmission des données d'un appareil à l'autre. Les canaux sont nécessaires chaque fois qu'un appareil souhaite publier et s'abonner au réseau PubNub. Alors qu'un utilisateur ne peut publier qu'un seul message à la fois, il peut s'abonner à plusieurs canaux différents à la fois.

### Installer et configurer le SDK PubNub Unity

Pour commencer, vous devrez installer toutes les dépendances PubNub et configurer le PubNub Unity SDK pour connecter votre application au réseau PubNub. Ce guide suppose que vous avez installé le moteur de jeu Unity, les actifs Unity et des éditeurs de code tels que Visual Studio. Veuillez vous référer à la [documentation du SDK Un](https://www.pubnub.com/docs/sdks/unity?utm_source=medium&utm_medium=syndication&utm_campaign=off_domain&utm_content=fr) ity pour plus de détails, mais à titre d'aperçu, vous devrez :

1.  Ajouter le paquet Unity via le [gestionnaire de paquets](https://www.pubnub.com/docs/sdks/unity#install-via-package-manager?utm_source=medium&utm_medium=syndication&utm_campaign=off_domain&utm_content=fr).
2.  Créer un [compte PubNub gratuit](https://admin.pubnub.com/?utm_source=medium&utm_medium=syndication&utm_campaign=off_domain&utm_content=fr) et obtenir vos clés PubNub. Vous devrez activer les fonctionnalités de votre jeu de clés dont votre application a besoin. Pour ce guide, vous devrez activer Presence et Stream Controller avec les paramètres par défaut. Pour en savoir plus sur les différentes fonctionnalités de votre jeu de clés, consultez nos [guides](https://www.pubnub.com/how-to/?sortBy=Most%20recent&categories=PubNub%20portal&utm_source=medium&utm_medium=syndication&utm_campaign=off_domain&utm_content=fr).
3.  Créez un nouveau projet Unity ou ouvrez votre jeu existant et fournissez à Unity les clés de publication et de souscription que vous avez obtenues à l'étape précédente pour [configurer](https://www.pubnub.com/docs/sdks/unity#configure-pubnub?utm_source=medium&utm_medium=syndication&utm_campaign=off_domain&utm_content=fr) l'objet de jeu PubNub dans l'éditeur Unity. Vous devez également fournir un UserId, car chaque objet PubNub a besoin d'un identifiant unique pour établir une connexion avec PubNub. Une fois cela fait, initialisez l'objet PubNub :

```js
using PubnubApi;
using PubnubApi.Unity;
…
PubNub pubnub = new Pubnub(pnConfiguration);
```

4.  Ajoutez un [écouteur d'événements](https://www.pubnub.com/docs/sdks/unity#add-event-listeners?utm_source=medium&utm_medium=syndication&utm_campaign=off_domain&utm_content=fr) pour que votre jeu réagisse aux messages, où votre back-end recevra essentiellement des notifications lorsque vous recevrez de nouveaux messages. Il existe différents écouteurs d'événements permettant d'implémenter une logique personnalisée pour répondre à chaque type de message ou d'événement, mais pour ce guide, vous aurez besoin des écouteurs d'événements Présence et Message :

```js
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}");
}
```

La[présence](https://www.pubnub.com/docs/general/presence/overview?utm_source=medium&utm_medium=syndication&utm_campaign=off_domain&utm_content=fr) est utilisée pour déterminer le statut en ligne et personnalisé de vos joueurs dans votre jeu, où PubNub génère des événements pour fournir des informations sur leur statut en temps réel. Vous pouvez en savoir plus sur l'implémentation de la présence dans votre jeu Unity grâce à notre [guide pratique](https://www.pubnub.com/how-to/add-presence-to-your-unity-game/?utm_source=medium&utm_medium=syndication&utm_campaign=off_domain&utm_content=fr).

Construire des listes d'amis
----------------------------

Vous commencerez par vous abonner à des canaux afin de recevoir des événements de présence, qui sont essentiellement des notifications permettant à votre jeu de savoir quand l'ami d'un joueur se connecte. Mais comment les joueurs peuvent-ils savoir quels joueurs sont leurs amis ? Les groupes de canaux sont une solution parfaite à ce problème.

### Groupes de canaux

Les[groupes](https://www.pubnub.com/docs/general/channels/subscribe#channel-groups?utm_source=medium&utm_medium=syndication&utm_campaign=off_domain&utm_content=fr) de canaux vous permettent de gérer un grand nombre de canaux en même temps. Les groupes de canaux sont essentiellement un pointeur vers une liste de canaux qui vous permet d'envoyer un seul appel d'abonnement pour un maximum de 2000 canaux par groupe de canaux. Les groupes de canaux sont propres à l'identifiant de l'utilisateur connecté au réseau, ce qui signifie que vous pouvez nommer un groupe de canaux de manière unique et le lier à ce lecteur.

Cela signifie qu'au lieu de devoir s'abonner à des canaux uniques par utilisateur, vous pouvez vous abonner à un groupe de canaux et recevoir la présence et d'autres événements chaque fois que l'état en ligne ou personnalisé d'un joueur change. Les groupes de canaux et les canaux sont des listes (groupe de canaux) d'amis et de membres (canaux) que vous pouvez gérer et dont vous pouvez recevoir les mises à jour.

### Configuration des groupes de canaux

Selon les besoins de votre jeu, vous aurez besoin d'au moins deux groupes de canaux pour mettre en place une liste d'amis pour chaque joueur, chacun étant concaténé avec l'ID utilisateur du joueur pour être identifié de manière unique. Veuillez noter que les noms peuvent être différents, alors assurez-vous de suivre notre [documentation sur les conventions de dénomination des canaux](https://www.pubnub.com/docs/general/channels/channel-naming?utm_source=medium&utm_medium=syndication&utm_campaign=off_domain&utm_content=fr):

```js
//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};
```

Vous avez besoin de deux groupes de canaux car vous souhaitez isoler les événements de présence des autres événements, tels que les messages de chat. Le fait que le même groupe de canaux représente à la fois les messages et les canaux peut entraîner un trafic inutile. Il est préférable d'isoler les événements autant que possible afin de permettre à votre jeu d'être plus souple et d'offrir davantage de fonctionnalités à l'avenir.

Si vous n'avez pas l'intention d'implémenter le chat d'amis, vous avez simplement besoin du groupe de canaux d'état. Si vous souhaitez mettre en place un chat d'amis, gardez à l'esprit que ce guide va suivre l'architecture des listes d'amis, et non la mise en place du système de chat pour votre jeu. Veuillez consulter notre [guide sur le chat en temps réel](https://www.pubnub.com/how-to/add-real-time-chat-to-your-unity-game/?utm_source=medium&utm_medium=syndication&utm_campaign=off_domain&utm_content=fr) pour plus d'informations sur l'implémentation d'un système de chat dans Unity.

Chaque groupe de canaux doit être associé à au moins un canal. Vous pouvez résoudre ce problème en créant un modèle de canal pour tous les joueurs et en concaténant l'ID utilisateur du joueur aux noms de canaux, comme par exemple :

```js
string chanFriendStatus = $”friends.presence.” + {UserID};
string chanFriendChat = $”friends.chat.” + {UserID};
```

Puis en ajoutant ces deux canaux au groupe de canaux approprié à l'aide de l'[API Groupes de canaux](https://www.pubnub.com/docs/sdks/unity/api-reference/channel-groups?utm_source=medium&utm_medium=syndication&utm_campaign=off_domain&utm_content=fr). Vous devez procéder ainsi pour chaque joueur qui se connecte pour la première fois :

```js
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
```

Cette façon d'ajouter ces canaux nommés au groupe de canaux respectif est exactement la même que celle utilisée pour ajouter et supprimer des amis de la liste d'amis d'un joueur, mais nous y reviendrons plus tard.

### Écouter les événements de présence et de message : S'abonner

Avec votre système de canaux et de groupes de canaux en place, vous pouvez maintenant vous abonner au réseau PubNub, qui génère des événements de présence chaque fois que le statut d'un joueur change et qu'il est effectivement en ligne.

Comme pour l'abonnement aux canaux, vous pouvez vous abonner directement aux groupes de canaux et recevoir des événements de présence et de message de tous les canaux associés à ce groupe de canaux. Généralement, lors de l'abonnement, nous pouvons inclure le paramètre withPresence pour que le SDK gère à la fois les canaux de présence et de non-présence (plus de détails sur ce que cela signifie dans notre [guide pratique de la présence pour Unity](https://www.pubnub.com/how-to/add-presence-to-your-unity-game/#h-5?utm_source=medium&utm_medium=syndication&utm_campaign=off_domain&utm_content=fr)). Cependant, nous ne voulons pas faire cela pour notre groupe de canaux chanGroupFriendsStatus, car nous voulons que seuls les événements de présence soient pris en compte et pas les autres événements, tels que les messages, les mises à jour de métadonnées, etc, pour ce canal.

Pour remédier à cette situation, vous pouvez ajouter -pnpres au chanGroupFriendsStatus. Cela signifie que tout événement pour ce groupe de canaux, en particulier les événements de présence, sera pris en compte par l'écouteur d'événements de présence que nous avons mis en place plus tôt. De plus, le chanGroupFriendsChat n'écoutera aucun événement de présence et se concentrera uniquement sur les messages :

```js
pubnub.Subscribe<string>()
  .ChannelGroups(new string[] {
    chanGroupFriendsStatus + “-pnpres”,
    chanGroupFriendsChat
  })
  .Execute();
```

### Envoyer un message : Publier

Alors que votre groupe de canaux chanGroupFriendsStatus est prêt à fonctionner, vous devez mettre en place un appel à publication pour qu'un ami puisse envoyer un message et que tous les amis associés à son groupe de canaux de chat reçoivent le message.

Bien que vous puissiez vous abonner à des groupes de canaux, vous ne pouvez pas les publier. Vous devez donc publier le message sur un canal associé au groupe de canaux que vous avez créé précédemment :

```js
PNResult<PNPublishResult> publishResponse = await pubnub.Publish()
  .Message(“Hey friends, let’s game?”)
  .Channel(chanFriendChat)
  .ExecuteAsync();
  PNPublishResult publishResult = publishResponse.Result;
//Handle result
```

Bien que vous ne puissiez pas publier directement sur les groupes de canaux, lorsque des messages sont publiés sur l'un des canaux de ce groupe de canaux, ils sont reçus par le gestionnaire de messages de l'auditeur du client. Cela signifie que tous les amis associés au groupe de canaux recevront le message.

### Chargement initial du jeu

Lorsque les joueurs se connectent pour la première fois, vous devez appeler le [service List Channels](https://www.pubnub.com/docs/sdks/unity/api-reference/channel-groups#list-channels?utm_source=medium&utm_medium=syndication&utm_campaign=off_domain&utm_content=fr) pour dresser la liste de tous les canaux, ou amis, du groupe de canaux :

```js
PNResult<PNChannelGroupsAllChannelsResult> friendsListResult= await pubnub.ListChannelsForChannelGroup()
  .ChannelGroup(chanGroupFriendsStatus)
  .ExecuteAsync();
```

Cette liste d'amis peut ensuite être utilisée pour construire l'interface utilisateur de la liste d'amis du joueur puisque vous pouvez extraire les identifiants de ces chaînes (puisque vous avez créé le modèle vous-même). S'il existe des métadonnées relatives à ces joueurs, vous pouvez alors utiliser les ID utilisateur avec l'[API App Context](https://www.pubnub.com/docs/sdks/unity/api-reference/objects?utm_source=medium&utm_medium=syndication&utm_campaign=off_domain&utm_content=fr) pour obtenir les métadonnées de leur profil, telles que le surnom, la photo de profil, les notes à leur sujet, etc.

Pour déterminer leur statut en ligne actuel, faites un appel HereNow pour récupérer tous les utilisateurs qui sont actuellement en ligne, et croisez les références avec la liste d'amis du joueur :

```js
pubnub.HereNow()
  .ChannelGroups(new String[]{ chanGroupFriendsStatus })
  .IncludeState(true)
  .IncludeUUIDs(true)
  .ExecuteAsync()
```

Vous pouvez ensuite mettre à jour l'indicateur de statut en ligne de votre interface utilisateur de liste d'amis pour montrer que ces amis sont en ligne. L'écouteur d'événements de présence que nous avons configuré plus tôt détectera tout changement d'état en ligne et personnalisé, et vous pourrez mettre à jour l'interface utilisateur de la liste d'amis du joueur en conséquence. Comme nous l'avons mentionné précédemment, les messages sont également pris en compte dans l'Event Listener Message et vous pouvez les afficher dans une couleur unique qui indique qu'ils ont été envoyés par le groupe d'amis.

Vous avez presque tout mis en œuvre pour ajouter une liste d'amis à votre système, mais comment les joueurs gèrent-ils leur liste d'amis ?

Gestion des amis : Système d'amitié
-----------------------------------

Comme nous l'avons montré précédemment, pour ajouter des amis à un groupe de canaux, vous pouvez appeler la [fonction Add Channels (Ajouter des canaux](https://www.pubnub.com/docs/sdks/unity/api-reference/channel-groups#add-channels?utm_source=medium&utm_medium=syndication&utm_campaign=off_domain&utm_content=fr) ) pour ajouter des canaux à un groupe de canaux. Cette opération peut être déclenchée lorsqu'un joueur clique sur un bouton pour ajouter un autre ami ou accepte une invitation d'un autre joueur.

Les joueurs peuvent également retirer des amis du groupe d'amis en appelant la [fonction Remove Channels](https://www.pubnub.com/docs/sdks/unity/api-reference/channel-groups#remove-channels?utm_source=medium&utm_medium=syndication&utm_campaign=off_domain&utm_content=fr) et en spécifiant le groupe de canaux et les canaux. Vous devrez répéter cette opération pour les groupes de canaux de statut et de chat que vous avez créés précédemment. Vous pouvez inclure un bouton qui lance cet appel, en transmettant l'identifiant de l'utilisateur et en l'incluant dans le modèle de canal que vous avez créé précédemment pour le retirer du groupe de canaux.

Bien que vous puissiez ajouter et supprimer des amis dans votre jeu, nous vous recommandons vivement de ne jamais permettre à vos joueurs d'ajouter/supprimer des canaux d'un groupe de canaux dans le jeu lui-même. Lorsqu'un joueur souhaite ajouter/supprimer des amis, une requête doit être adressée à votre serveur dorsal (qui peut être le même que celui utilisé lors de l'inscription d'un utilisateur) pour traiter ces demandes.

Cela permet d'augmenter la sécurité de votre jeu : vous ne voulez pas que des joueurs qui ne sont pas amis entre eux puissent accéder au groupe d'amis d'un joueur. L'implémentation de l'[Access Manager](https://www.pubnub.com/docs/general/security/access-control?utm_source=medium&utm_medium=syndication&utm_campaign=off_domain&utm_content=fr), qui est un administrateur de permission basé sur des jetons cryptographiques, vous permet de réguler l'accès des clients aux ressources PubNub.

Avec ce contrôle de sécurité sur le serveur dorsal, vous pouvez mettre en œuvre un système qui reçoit des invitations de demandes d'amis pour un joueur spécifique et transmet la demande à la cible visée. Le joueur choisit d'accepter ou de refuser la demande, renvoyant l'invitation via votre serveur dorsal (protégé par Access Manager) et la transmettant à l'expéditeur d'origine. Cela garantit que les listes d'amis de vos joueurs sont sécurisées et bien gérées.

Prochaines étapes
-----------------

Dans ce guide pratique, vous avez appris à ajouter une liste d'amis à votre jeu Unity. En utilisant les groupes de canaux et la présence, vous avez mis en place un système qui vous permet de voir les changements de statut en ligne/hors ligne et personnalisés de vos amis à l'aide de PubNub, ainsi que les bases pour ajouter et supprimer des amis en sécurisant les permissions avec le gestionnaire d'accès.

Les développeurs de jeux peuvent en apprendre davantage grâce aux ressources suivantes :

-   Lire notre [documentation](https://www.pubnub.com/docs/sdks/unity?utm_source=medium&utm_medium=syndication&utm_campaign=off_domain&utm_content=fr).
-   Apprenez à [ajouter un chat en temps réel dans Unity](https://www.pubnub.com/how-to/add-real-time-chat-to-your-unity-game/?utm_source=medium&utm_medium=syndication&utm_campaign=off_domain&utm_content=fr).
-   Implémentez Presence dans votre projet Unity Engine avec notre [guide pratique](https://www.pubnub.com/how-to/add-presence-to-your-unity-game/?utm_source=medium&utm_medium=syndication&utm_campaign=off_domain&utm_content=fr).
-   Comprenez comment notre [jeu de démonstration Unity](https://github.com/PubNubDevelopers/unity-multiplayer-shooter) met en œuvre un tableau d'affichage et un tableau de classement en temps réel.
-   Plongez dans le [code source du SDK Unity](https://github.com/pubnub/unity).

N'hésitez pas à contacter l'équipe des relations avec les développeurs à l'[adresse devrel@pubnub.com](mailto:devrel@pubnub.com) pour toute question ou préoccupation.

Comment PubNub peut-il vous aider ?
===================================

Cet article a été publié à l'origine sur [PubNub.com](https://www.pubnub.com/how-to/add-friend-list-to-your-unity-game/?utm_source=medium&utm_medium=syndication&utm_campaign=off_domain&utm_content=fr)

Notre plateforme aide les développeurs à construire, fournir et gérer l'interactivité en temps réel pour les applications web, les applications mobiles et les appareils IoT.

La base de notre plateforme est le réseau de messagerie en temps réel le plus grand et le plus évolutif de l'industrie. Avec plus de 15 points de présence dans le monde, 800 millions d'utilisateurs actifs mensuels et une fiabilité de 99,999 %, vous n'aurez jamais à vous soucier des pannes, des limites de concurrence ou des problèmes de latence causés par les pics de trafic.

Découvrez PubNub
----------------

Découvrez le [Live Tour](https://www.pubnub.com/tour/introduction/?utm_source=medium&utm_medium=syndication&utm_campaign=off_domain&utm_content=fr) pour comprendre les concepts essentiels de chaque application alimentée par PubNub en moins de 5 minutes.

S'installer
-----------

Créez un [compte PubNub](https://admin.pubnub.com/signup/?utm_source=medium&utm_medium=syndication&utm_campaign=off_domain&utm_content=fr) pour un accès immédiat et gratuit aux clés PubNub.

Commencer
---------

La [documentation PubNub](https://www.pubnub.com/docs?utm_source=medium&utm_medium=syndication&utm_campaign=off_domain&utm_content=fr) vous permettra de démarrer, quel que soit votre cas d'utilisation ou votre [SDK](https://www.pubnub.com/docs?utm_source=medium&utm_medium=syndication&utm_campaign=off_domain&utm_content=fr).