Comment ajouter un système de matchmaking à un jeu de stratégie multijoueur

Principales informations

Principales informations

Principales informations

Le matchmaker d'Edgegap est un système de matchmaking entièrement géré et infiniment personnalisable qui regroupe de manière optimale les joueurs du monde entier - et son utilisation est gratuite pendant le développement de votre jeu de stratégie multijoueur.

C'est également le seul système de matchmaking (à notre connaissance) avec des règles de matchmaking basées sur la latence pour offrir l'expérience multijoueur en ligne idéale pour votre jeu, quel que soit le moteur (Unity, Unreal, etc.) ou les services de jeu (EOS, UGS, PlayFab, Heroic Labs Nakama, Braincloud, etc.).

Comme notre matchmaker est basé sur des paramètres, il n'est pas nécessaire d'écrire du code. L'intégration est donc très facile et si nécessaire, nos guides d'intégration vous accompagnent à chaque étape.

Lorsque votre jeu est en ligne, notre système de matchmaking étant entièrement géré, vous n'avez pas besoin de vous occuper de l'infrastructure, des bugs, des pannes, de la scalabilité ou de la gestion des bases de données. Nous nous occupons de tout pour vous, réduisant ainsi votre charge de travail en DevOps à presque zéro.

Comment intégrer le matchmaking dans votre jeu de stratégie multijoueur

-> Cet article est basé sur la documentation sur le matchmaking. Si vous rencontrez des problèmes ou des incohérences, veuillez vous assurer de vous référer au guide original, car il est plus souvent mis à jour.

L'exemple suivant vous aidera à tester le flux principal des joueurs de matchmaking, à savoir :

Il y a cinq étapes pour intégrer notre matchmaker à votre jeu :

  1. La première étape est de créer un compte et d'utiliser notre exemple de jeu de stratégie. Voilà, vous êtes (techniquement) à mi-chemin ! Vous devez simplement intégrer le matchmaker dans votre jeu (voir étape 5).

  2. Maintenant, vous ne devez jamais suivre aveuglément un exemple de JSON trouvé sur Internet, et il est donc fortement recommandé d'adapter les règles ci-dessus à votre jeu. L'étape 2 (« Explorer la Configuration ») est notre « comment lire » qui explique le fonctionnement de chaque règle de matchmaking (« Explorer la Configuration »).

  3. L'étape 3 (« Réviser les Détails de l'Instance ») couvre votre matchmaker personnel et spécifique pour s'assurer qu'il est déployé et fonctionne avec le design de votre jeu.

  4. L'étape 4, comme son nom l'indique (« 4. Tester l'API des Billets »), concerne le test des demandes de matchmaking des joueurs reçues par le matchmaker, appelées billets.

  5. L'étape 5 (« Intégrer le Matchmaking dans votre Jeu ») souligne comment intégrer le matchmaker au sein du projet de votre moteur.

Si vous rencontrez des défis de dépannage, notre Centre d'Apprentissage propose des conseils supplémentaires.

1. Configuration de la Gratuité

Inscrivez-vous pour votre compte Edgegap gratuit, et naviguez vers la page du tableau de bord du Matchmaker.

À partir de là, cliquez d'abord sur Créer un Matchmaker et saisissez :

  • Un nom pour votre matchmaker – qui est purement pour votre propre référence, par exemple quickstart-dev,

  • Ensuite, téléchargez l'exemple simple suivant comme configuration JSON pour votre jeu de stratégie :

{
  "version": "1.0.0",
  "max_deployment_retry_count": 3,
  "ticket_expiration_period": "5m",
  "ticket_removal_period": "1m",
  "profiles": {
    "casual-example": {
      "application": {
        "name": "my-game-server=>CHANGE-THIS-NAME-HERE",
        "version": "2024.01.30-16.23.00-UTC=>CHANGE-THIS-HERE "
      },
      "rules": {
        "initial": {
          "match_size": {
            "type": "player_count",
            "attributes": {
              "team_count": 2,
              "team_size": 5
            }
          },
          "beacons": {
            "type": "latencies",
            "attributes": {
              "difference": 25,
              "max_latency": 100
            }
          },
          "league_rank": {
            "type": "number_difference",
            "attributes": {
              "max_difference": 1
            }
          },
          "selected_maps": {
            "type": "intersection",
            "attributes": {
              "overlap": 1
            }
          },
          "selected_beacons": {
            "type": "intersection",
            "attributes": {
              "overlap": 1
            }
          }
        },
        "expansions": {
          "10": {
            "beacons": {
              "difference": 40,
              "max_latency": 150
            }
          },
          "30": {
            "beacons": {
              "difference": 50
            }
          },
          "60": {
            "league_rank": {
              "max_difference": 2
            }
          },
          "180": {
            "beacons": {
              "difference": 100,
              "max_latency": 500
            }
          }
        }
      }
    },
    "competitive-example": {
      "application": {
        "name": "my-game-server",
        "version": "2024.01.30-16.23.00-UTC"
      },
      "rules": {
        "initial": {
          "match_size": {
            "type": "player_count",
            "attributes": {
              "team_count": 2,
              "team_size": 5
            }
          },
          "beacons": {
            "type": "latencies",
            "attributes": {
              "difference": 25,
              "max_latency": 100
            }
          },
          "league_rank": {
            "type": "number_difference",
            "attributes": {
              "max_difference": 0
            }
          },
          "selected_maps": {
            "type": "intersection",
            "attributes": {
              "overlap": 1
            }
          },
          "selected_beacons": {
            "type": "intersection",
            "attributes": {
              "overlap": 1
            }
          }
        },
        "expansions": {
          "30": {
            "beacons": {
              "difference": 40,
              "max_latency": 150
            }
          },
          "60": {
            "beacons": {
              "difference": 50
            }
          },
          "180": {
            "beacons": {
              "max_latency": 250
            }
          }
        }
      }
    },
    "challenger-example": {
      "application": {
        "name": "my-game-server",
        "version": "2024.01.30-16.23.00-UTC"
      },
      "rules": {
        "initial": {
          "match_size": {
            "type": "player_count",
            "attributes": {
              "team_count": 2,
              "team_size": 5
            }
          },
          "beacons": {
            "type": "latencies",
            "attributes": {
              "difference": 25,
              "max_latency": 100
            }
          },
          "league_rank": {
            "type": "number_difference",
            "attributes": {
              "max_difference": 0
            }
          },
          "selected_maps": {
            "type": "intersection",
            "attributes": {
              "overlap": 1
            }
          },
          "selected_beacons": {
            "type": "intersection",
            "attributes": {
              "overlap": 1
            }
          }
        },
        "expansions": {
          "30": {
            "beacons": {
              "difference": 40,
              "max_latency": 150
            }
          },
          "180": {
            "beacons": {
              "difference": 50
            }
          },
          "240": {
            "beacons": {
              "max_latency": 250
            }
          }
        }
      }
    }
  }
}

(rappel, veuillez vous assurer de changer le nom et la version de l'application pour correspondre à votre Application et Versions !)

Si aucune erreur de validation n'apparaît, cliquez sur Créer et Démarrer et attendez la fin du processus. Cela entraînera le démarrage d'un nouveau cluster gratuit, avec votre Matchmaker Simple Exemple.

Vous pouvez maintenant passer à l'étape suivante.

2. Explorer la Configuration

Règles de Jeu de Stratégie Uniques

Spécifiquement pour les jeux de stratégie, vous pouvez définir plusieurs Profils de Matchmaking pour les règles et paramètres spécifiques aux modes de jeu :

  • restreindre le rang à une différence entre deux joueurs pour des jeux plus décontractés,

  • restreindre la différence de rang pour n'autoriser que des adversaires avec le même rang pour des jeux classés,

  • permettre aux joueurs de fournir leurs préférences de carte et de choisir une carte adaptée à tous,

  • ajouter une UI de Sélection de Hub pour restreindre les adversaires aux Balises de Ping spécifiées,

  • restreindre la latence de matchmaking à un seuil maximum pour éviter de faire correspondre des joueurs éloignés,

  • restreindre la latence de matchmaking à une différence maximum pour maximiser l'équité des ping,

  • allouer plus de CPU ou de mémoire en utilisant différentes Versions d'App quand plus de joueurs sont autorisés,

  • Rejoindre en Groupe pour des lobbys préétablis ou pour remplir des équipes sans dépasser les tailles d'équipe.

Commencez par les conditions idéales, et élargissez les restrictions pour assurer des matchs rapides :

  • relâchez lentement les restrictions de latence au fil du temps pour trouver plus de joueurs,

  • augmentez lentement la différence de rang autorisée pour trouver plus de joueurs,

  • augmentez le temps entre les élargissements pour les rangs les plus élevés (challengers), car moins de joueurs sont disponibles.

Créez des billets avec un rang plus élevé pour des matchs de promotion, afin de faire correspondre des adversaires plus difficiles.

Définissez des profils de tricheur séparés pour vous assurer que les tricheurs signalés ou les joueurs ayant un grand nombre de rapports de modération n'affectent pas négativement l'expérience des joueurs légitimes dans les matchs classés.

Versionnement Sémantique

Chaque nouvelle version utilise le Versionnement Sémantique pour communiquer clairement l'impact des changements en interprétant le format majeur.minor.patch :

  • les versions majeures incluent des changements critiques et nécessitent une révision d'intégration,

  • les versions mineures comprennent des améliorations substantielles compatibles avec les versions antérieures,

  • les versions de patch comprennent des corrections de bogues et des améliorations mineures.

Certaines déploiements peuvent entraîner des erreurs. Nous essayons de résoudre cela en réessayant le déploiement jusqu'à max_deployment_retry_count fois automatiquement (sans confirmation du client).

Pour garantir que les pannes inattendues des clients ou les billets abandonnés ne persistent pas et ne prennent pas de ressources de votre matchmaker, les billets seront annulés après ticket_expiration_period ce qui fera changer leur statut à ANNULÉ et seront ensuite définitivement supprimés après ticket_removal_period.

Le cœur de notre logique de matchmaking est configuré dans Profils de Matchmaking. Chaque profil est une file d'attente de matchmaking complètement isolée, pointant vers Versions d'App avec une quantité préalable de ressources CPU et mémoire (RAM) requises.

Les Règles de Matchmaking dans l'ensemble de règles initial doit être respecté pour que les joueurs soient regroupés, chacun défini par trois propriétés :

  • nom de votre choix, par exemple - taille de match,

  • type de règle, également connu sous le nom d'opérateur, par exemple - nombre_de_joueurs,

  • et enfin les attributs de l'opérateur, par exemple nombre_d_equipes ou taille_de_l_equipe.

Règle du Nombre de Joueurs

C'est une règle spéciale définissant combien de joueurs doivent correspondre pour initier l'attribution :

  • nombre_d_equipes se réfère au nombre d'équipes, 1 équipe peut être utilisée pour des modes coopératifs ou de tous contre tous,

  • taille_de_l_equipe se réfère au nombre de joueurs par équipe.

Notre exemple simple démontre un jeu coopératif avec 2 joueurs.

Veuillez noter que la règle "Nombre de Joueurs" est requise et ne peut être définie qu'une fois dans vos règles de configuration initiales.

Règle des Latences

Utilisez cette règle pour fournir le ping le plus bas possible pour tous les joueurs. Une fois que les clients mesurent et soumettent leur temps de trajet aller-retour (ping) contre toutes les balises disponibles, Gen2 ne considérera que les correspondances dans une différence spécifique des valeurs de ping, mesurée contre les Balises de Ping. Cela présente une solution “souple” pour diviser votre base de joueurs, permettant un regroupement avec des régions voisines, améliorant particulièrement la vitesse des matchs pour les régions moins peuplées. Utilisez max_latencypour éviter de faire correspondre des joueurs situés trop loin.

Vous pouvez maintenant passer à l'étape suivante.

Notre exemple de règle balises ci-dessus avec "différence": 50, "max_latency": 200 initialement :

  • Alice et Bob vont correspondre, puisque Beijing est rejetée (>200) et le reste est dans | A-B | < 50 :

    • Alice {Montréal: 12.3, Newark: 45.6, Dallas: 59.9, Beijing: 264.4}; et

    • Bob {Montréal: 27.3, Newark: 32.4, Dallas: 23.1, Beijing: 252.2}.

  • Charlie et Dave ne vont pas correspondre, puisque | C-D | > 50 pour la Balise de Dallas :

    • Alice {Montréal: 5.7 Newark: 44.2, Dallas: 59.5, Beijing: 263.2}; et

    • Bob {Montréal: 57.8, Newark: 32.0, Dallas: 24.2, Beijing: 272.3}.

Veuillez noter que les "Règles de Latences" ne peuvent être définies qu'une fois dans vos règles de configuration initiales.

3. Réviser les Détails de l'Instance

Révisez les détails de votre nouveau matchmaker dans notre tableau de bord une fois qu'il est initialisé :

Statut indique la santé du service, peut être EN LIGNE, HORS LIGNE, ou ERREUR.

  • Identifiant aide le personnel d'Edgegap à trouver rapidement votre matchmaker si vous avez besoin d'aide pour le dépannage.

  • Démarré à peut être utile pour localiser le temps de mise à jour le plus récent.

  • Taille correspond à l'un de nos Niveaux de Tarification.

  • URL de l'API sera utilisée par les Clients de Jeu et les Serveurs de Jeu pour communiquer avec Gen2.

  • URL Swagger est une interface GUI de spécification openAPI pratique que nous fournissons pour explorer le schéma de l'API.

  • Jeton d'Auth est un jeton secret unique utilisé par les Clients de Jeu et le Serveur de Jeu pour l'authentification.

Pour tester votre nouveau matchmaker utilisant l'API, vous aurez besoin de l'URL Swagger, de l'URL de l'API et du Jeton d'Auth.

Vous pouvez maintenant passer à l'étape suivante.

4. Tester l'API des Billets

Tout d'abord, ouvrez votre URL Swagger pour inspecter votre schéma openAPI dans l'interface Swagger

Cliquez sur le /...swagger.json URL sous le titre “Matchmaker” pour ouvrir le schéma JSON brut :

Enregistrez cette page en tant que fichier sur votre disque (CTRL/CMD+S

Écrit par

l'équipe Edgegap