Vertical

Unity et Yahoo Games Network

Le moteur réseau de Unity étant complexe à prendre en main et peu adapté aux jeux client/serveur nous avons choisi de nous orienter vers une solution tierce pour la partie multijoueur de nos jeux. Nous utilisons Yahoo Games Network (anciennement Player.io) qui offre tout ce qu’il faut comme outils pour réaliser un jeu client/server.

Yahoo Games Network  (YGN)

Yahoo Games Network est à la base un portail de jeu en ligne. Depuis l’acquisition de Player.io ils offrent également un ensemble de services “backend” pour réaliser des jeux multijoueurs. Les principaux étant :

  • Une architecture  client/serveur avec code serveur en C# (pratique avec Unity qui est aussi en C#)
  • Une base de données objets (BigDB)
  • Un système de fichiers (GameFS)
  • Un outil d’analytics ( PlayerInsight)

Il est possible avec YGN de réaliser des jeux synchrones ou asynchrones. Il est possible de réaliser des jeux synchrones jusqu’à 45 joueurs par partie. Le coût du service est de 10% des revenus du jeu (abaissable à 5% si le jeu est distribué sur le portail de Yahoo) à l’heure où ces lignes sont écrites.

Je ne vais pas revenir en détail sur tous ses services mais plutôt sur la façon d’intégrer YGN dans un jeu Unity.

Utiliser YGN dans un projet Unity

La première étape pour utiliser YGN est de s’inscrire sur le site et de créer un projet.  Une fois le projet créé il faut télécharger le SDK de YGN qui est un seul fichier pour toutes les plateformes.

Une fois le SDK téléchargé le plus simple est d’ensuite aller regarder le projet de démo fourni pour Unity dans Unity3D\Example – Multiplayer – Mushrooms. Il s’agit ici d’un jeu tout simple ou les joueurs doivent ramasser un maximum de champignons en un temps donné. Ce dossier de démo contient 2 projets : Un pour le client du jeu (en Unity donc) et un pour le serveur (à ouvrir avec Visual Studio).  Le premier se trouve dans le dossier Unity3D, le second dans le dossier ServerSide Code. Vous  pouvez trouver les instructions pour ces projets dans le fichier Getting Started.txt. Si vous n’êtes pas familier du tout avec le concept de client/serveur je vous invite à lire cet article.

Comme on peut le voir dans l’exemple il est assez simple d’intégrer YGN dans un projet Unity. Le principe de base de la relation client/server avec YGN est le suivant :

  • Le client demande à se connecter au serveur
  • Le serveur autorise ou non la connexion du client
  • Le client demande ensuite à rejoindre une “room” sur le serveur (voir juste après)
  • Le serveur regarde si une room de ce type existe et place le joueur dedans, si aucune n’existe une nouvelle est créée
  • Une fois le joueur présent dans une room il peut échanger des messages avec le serveur (qui peut si besoin les faire suivre aux autres utilisateurs de la même room)
  • Le joueur peut ensuite changer de room si besoin
  • Le joueur se déconnecte

Côté Serveur

Pour comprendre comment tout cela fonctionne côté serveur il faut comprendre le principe de Room. Sur YGN chaque room est une instance autonome qui permet à des joueurs de communiquer entre eux et avec le serveur. Chaque room a sa propre instance de code serveur de la classe Game qui peut être différente d’une room à l’autre. Chaque type de Room correspond à un type d’interactions mutiljoueurs dans le jeu. Les joueurs arrivent par exemple dans un “Lobby” quand ils se connectent où ils peuvent juste discuter entre eux. Ils peuvent ensuite être placés dans une Room de “Matchmaking” qui va sélectionner les joueurs pouvant s’affronter. Puis enfin ils arrivent dans la Room “Game” qui va être celle où la partie se déroule.

On peut voir un exemple de code serveur adapté à une room dans la classe gameCode.cs du projet d’exemple fourni avec le SDK. Le tag  [RoomType(“RoomName”)] indique au serveur à quelle type de room correspond le code qui suit.

Coté Client

La documentation du plugin YGN pour Unity est disponible ici : https://gamesnet.yahoo.com/documentation/reference/unity3d/  Suffisante la plupart du temps, elle manque encore d’exemples et de certaines explications pour être vraiment complète.

Cet article ne rentre pas dans le détail de chaque méthode mais présente rapidement les principales méthodes pour se connecter au serveur et échanger avec lui des messages. Pour se connecter c’est la méthode PlayerIOClient.PlayerIO.Connect() qui est utilisée. Pour changer de room on utilisera client.Multiplayer.CreateJoinRoom(). Une fois dans une room on peut envoyer des messages au serveur avec le méthode pioconnection.Send() et traiter les messages reçus dans le FixedUpdate du monobehavior qui gère la connexion. On peut voir des exemples d’utilisation de toutes ces méthodes dans la classe GameManager.cs

Je reviendrai dans un prochain Article sur les features plus avancées de YGN, notamment la base NoSQL et la Payvault.

ARTICLE SIMILAIRE: Structure de dossiers pour les projets Unity

VOUS CHERCHEZ UN PARTENAIRE POUR RÉALISER UN JEU VIDÉO ?   VOUS AVEZ UN PROJET D’APPLICATION LUDIQUE ?  CONTACTEZ-NOUS!

Categories: Multiplayer, Plugin, Unity3D

Leave a Reply

Your email address will not be published. Required fields are marked *