Mirror

Mirror sur Edgegap

Ce guide vous aidera à créer un serveur sans interface sur Edgegap pour un projet Unity utilisant Mirrorarrow-up-right comme solution réseau.

Ce guide utilisera le projet d'exemple open-source Tanks, qui est déjà disponible dans votre exemple Mirror, emplacement Assets/Mirror/Examples/Tanks.

L'exemple final peut être trouvé sur notre GitHubarrow-up-right.

Construire le serveur de jeu

Une fois votre jeu prêt, rendez-vous sur la Construction de l'éditeur Unity, sous Fichier -> Paramètres de compilation dans les menus supérieurs. Assurez-vous de sélectionner les bons préréglages selon votre version d'Unity.

  • Avant la version 2021.2 :

    • Définir Plateforme cible vers Linux;

    • Définir Architecture vers x86_64;

    • Cochez la Compilation serveur .

  • Sinon :

    • Définir Plateforme vers Serveur dédié;

    • Définir Plateforme cible vers Linux.

Puis appuyez sur construire et sélectionnez un nouveau dossier vide nommé linux_server comme destination du fichier. Transférez le linux_server dossier dans un second dossier vide, qui sera appelé [BUILD DU SERVEUR] dans ce document.

Conteneurisation du serveur de jeu dédié

Nous allons créer une image docker contenant le serveur de jeu dédié dans cette partie. Vous pourriez aussi être intéressé par la lecture de Unity Server in Docker.

Si vous avez besoin de plus d'informations sur Docker avec Edgegap, veuillez vous référer à cette documentation.

Dockerfile

Notez le port que vous utilisez pour les communications réseau, appelé [PORT_JEU]. Par défaut, le port utilisé est 7777. Vous pouvez trouver cette information dans l'éditeur Unity, sur le NetworkManager objet de jeu, dans le propriété Transport composant.

  • Copiez les lignes ci-dessus et collez-les dans votre Dockerfile, placé à l'intérieur de [BUILD DU SERVEUR]. Modifiez les [PORT_JEU] espaces réservés pour votre port de jeu.

Avoir le [PORT_JEU] ouvert à la fois en TCP et UDP vous permet d'utiliser le transport que vous préférez dans le composant NetworkManager . Enfin, créez un fichier nommé boot.sh à la racine du [BUILD DU SERVEUR] dossier. Il sera exécuté au démarrage de l'image dans un conteneur.

  • Copiez les deux lignes suivantes, assurez-vous de remplacer les [VOTRE JEU] espaces réservés par le nom du fichier généré.

À ce stade, vous devriez avoir la hiérarchie suivante :

  • dossier [BUILD DU SERVEUR] > > - Dockerfile > > - boot.sh > > - linux_server dossier > > > - Fichiers générés par Unity

  • Démarrez une invite de commande dans le [BUILD DU SERVEUR] dossier, et exécutez les commandes Docker suivantes :

circle-exclamation

Utilisation de Linux

Utilisation de cmd

Utilisation de Powershell

Après ces commandes, vous devriez pouvoir voir votre image téléchargée sur le site Edgegap si vous utilisez le registre de conteneurs Edgegap. Voir ce doc si vous souhaitez utiliser le registre Edgegap. Vous pouvez également utiliser un autre registre privé.

Déploiement sur Edgegap

Naviguez vers la page Applications & Jeux du site web. Cliquez sur le Créer Nouveau bouton en haut à droite pour accéder au formulaire d'application. Voici les champs et comment les remplir correctement :

  • Nom de l'application : Peut être n'importe quel nom notable que vous souhaitez utiliser pour reconnaître facilement votre application parmi les autres.

  • Image : Peut être n'importe quelle image spécifique que vous souhaitez utiliser pour reconnaître facilement votre application parmi les autres.

  • Nom de version : Vous pouvez utiliser un nom de version pour décrire la portée de la version que vous déployez. Des exemples peuvent être « demo », « production », « v1 », « v2 »

  • Conteneur :

    • Registre : « [URL] », où [URL] est la valeur des identifiants affichables sur la page du dépôt de conteneurs.

    • Répertoire d'image : « [PROJET]/[VOTRE JEU] », où [PROJET] et [VOTRE JEU] sont les valeurs que vous avez utilisées précédemment lors de la poussée de l'image docker.

    • Tag : « [TAG] », où [TAG] est la valeur que vous avez utilisée précédemment lors de la poussée de l'image docker.

    • Cochez « Utiliser un dépôt privé »

    • Nom d'utilisateur du registre privé : « [NOM_UTILISATEUR] », où [NOM_UTILISATEUR] est la valeur de vos identifiants.

    • Jeton du registre privé : « [TOKEN] », où [TOKEN] est la valeur de vos identifiants.

    • Exigences : Laisser tel quel.

    • Ports :

      • Cliquez sur le + Ajouter un port lien pour ajouter un nouveau port, et ajoutez les entrées suivantes :

        • [PORT_JEU] - TCP/UDP - désactiver les Vérifications

        • 3389 - TCP - désactiver les Vérifications

Une fois votre application créée, vous pouvez appuyer sur le API Deploy bouton pour procéder au déploiement de votre serveur de jeu. Choisissez la région dans laquelle vous souhaitez déployer et saisissez le nombre de joueurs aléatoires que vous souhaitez générer en fonction de votre jeu. Vérifiez que tout fonctionne correctement en vérifiant ce qui suit :

  • Le dernier statut doit être défini sur Prêt.

  • Dans l'onglet Mappage des ports onglet, vous devriez voir le port que vous avez défini dans le formulaire de création de l'application :

Ajouter le HUD d'exemple dans votre application cliente

  • Définissez le Port valeur de la propriété Transport composant du NetworkManager vers le port externe défini dans l'onglet Mappage des ports de votre déploiement.

Dans cet exemple, le port a été défini sur 31887. Cela dépend principalement du jeu que vous développez et sera très probablement défini de manière programmatique dans la base de code du jeu.

  • Définissez la valeur de Adresse réseau du Gestionnaire réseau sur le Hôte. Cette URL peut être trouvée dans le Résumé du déploiement sur le tableau de bord ou via l'API.

Dans cet exemple, l'adresse a été définie sur 0ace560706a5.pr.edgegap.net. Encore une fois, cette valeur sera très probablement définie de manière programmatique lors de la communication du client avec le serveur master/API responsable du processus de matchmaking.

Avec les bonnes informations, vous devriez pouvoir vous connecter normalement au serveur de jeu et commencer à jouer immédiatement.

Vous avez maintenant un projet Mirror disponible à déployer à la demande !

Avec des déploiements basés sur des places, il est possible d'utiliser Mirror pour créer un système qui supprime automatiquement les sessions Edgegap bloquées une fois qu'un joueur se déconnecte du serveur, en utilisant NetworkManager fonctions de rappel, et un NetworkBehaviour script attaché au prefab du joueur qui utilise une procédure distante (RPC) et une fonction Command.

Lorsque le serveur démarre, le NetworkManager récupère la liste des ID de session liés à son déploiement depuis l'API Edgegap et les stocke. Ensuite, lorsqu'un nouveau joueur se connecte au serveur, une fonction côté client est initiée via RPC qui enverra l' adresse IP du joueur au serveur avec une commande. Avec l'IP du joueur, le serveur vérifie s'il existe une IP correspondante dans les données de chaque session ; Le serveur obtient les données de la session en utilisant son ID mis en cache avec l'API Edgegap. Si une correspondance est trouvée, l' ID de session est mappé à la NetworkConnectionToClient.

Étant donné que de nouvelles sessions peuvent être ajoutées après le démarrage du serveur, la liste des ID de session est mise à jour et les nouvelles sessions sont vérifiées si une correspondance n'a pas pu être trouvée la première fois.

Enfin, une fois qu'un joueur se déconnecte du serveur, le serveur utilise le NetworkConnectionToClient de ce joueur pour récupérer leur ID de sessionassocié, puis utilise l'API Edgegap pour supprimer cette session. Cela libère une socket dans le déploiement pour qu'un nouveau joueur puisse rejoindre.

PlayerNetworkBehaviour

CustomNetworkManager

Fonctionnalités optionnelles

Ce script peut être étendu avec des fonctionnalités optionnelles et indépendantes qui aident à gérer les sessions dans des cas spécifiques.

Par exemple, un délai d'expiration peut être défini pour supprimer les sessions de places vides après un laps de temps configurable suite à l'initialisation complète du serveur. C'est une fonctionnalité utile dans le cas d'un joueur qui quitte avant que son ticket de matchmaking soit résolu, ce qui créerait une session vide une fois qu'une correspondance est trouvée. Si le joueur n'envoie jamais son adresse IP pour être mappée à l'ID de session avant l'expiration du délai, alors cette session est supprimée pour libérer une socket.

Une autre fonctionnalité peut être de déconnecter les joueurs inactifs après une longue période afin de libérer des sockets. Une fois connecté au serveur, le client doit envoyer un message de battement minimaliste au serveur toutes les quelques secondes, ou est autrement déconnecté si trop de battements sont manqués d'affilée. À la fois l'intervalle entre les battements et le nombre maximum de messages manquants consécutifs peuvent être configurés, en fonction des besoins du jeu. Dans cet exemple, un battement est envoyé toutes les quelques secondes si le tank se déplace sur la carte ou tire.

PlayerNetworkBehaviour - Gestion des sessions par siège

CustomNetworkManager - Gestion des sessions par siège

Mis à jour

Ce contenu vous a-t-il été utile ?