Integrieren Sie Amazon GameLift in ein Unity-Projekt - Amazon GameLift

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Integrieren Sie Amazon GameLift in ein Unity-Projekt

In diesem Thema wird erklärt, wie Sie das Amazon GameLift C# Server SDK-Plugin für Unity einrichten und in Ihre Spielprojekte integrieren.

Zusätzliche Ressourcen:

Voraussetzungen

Um das Amazon GameLift C#-Server-SDK-Plugin für Unity zu verwenden, benötigen Sie die folgenden Komponenten:

Einrichten von UnityNuGet

Wenn Sie Ihr Spieleprojekt noch nicht UnityNuGet eingerichtet haben, führen Sie die folgenden Schritte aus, um das Tool mithilfe des Unity-Paketmanagers zu installieren. Alternativ können Sie die NuGet CLI verwenden, um die DLLs manuell herunterzuladen. Weitere Informationen finden Sie im Amazon GameLift C#-Server-SDK SDK for UnityREADME.

Zur Integration UnityNuGet in Ihr Spielprojekt
  1. Öffnen Sie Ihr Projekt im Unity-Editor, gehen Sie zum Hauptmenü und wählen Sie Bearbeiten, Projekteinstellungen aus. Wählen Sie aus den Optionen den Abschnitt Package Manager und öffnen Sie die Gruppe Scoped Registries.

  2. Wählen Sie die Schaltfläche + und geben Sie die folgenden Werte für die bereichsbezogene Registrierung ein: UnityNuGet

    Name: Unity NuGet URL: https://unitynuget-registry.azurewebsites.net Scope(s): org.nuget
  3. Für Benutzer der Unity-Version 2021:

    Suchen Sie nach der Einrichtung nach Assembly Version Validation Fehlern UnityNuGet, die in der Unity-Konsole angezeigt werden. Diese Fehler treten auf, wenn Bindungsumleitungen für stark benannte Assemblys in den NuGet Paketen nicht korrekt in Pfade innerhalb Ihres Unity-Projekts aufgelöst werden. Um dieses Problem zu beheben, konfigurieren Sie die Assembly-Versionsvalidierung von Unity:

    1. Gehen Sie im Unity-Editor zum Hauptmenü und wählen Sie Bearbeiten, Projekteinstellungen und öffnen Sie den Bereich Player.

    2. Deaktivieren Sie die Option Assembly-Versionsvalidierung.

Installieren Sie das Plug-in

Gehen Sie wie folgt vor, um das Amazon GameLift C#-Server-SDK-Plugin für Unity zu installieren und die Log4net-Protokollierung zu konfigurieren.

So installieren Sie das Plugin
  1. Öffnen Sie Ihr Projekt im Unity-Editor, rufen Sie das Hauptmenü auf und wählen Sie Fenster, Paketmanager aus.

  2. Wählen Sie die Schaltfläche +, um ein neues Paket hinzuzufügen. Wählen Sie die Option Paket aus Tarball hinzufügen.

  3. Suchen Sie unter Pakete auf Festplatte auswählen nach dem Amazon GameLift C# Server SDK-Plug-In für Unity-Download-Dateien und wählen Sie die Amazon GameLift .tgz Server-SDK-Datei aus. Wählen Sie Öffnen, um das Plugin zu installieren.

Das GameLift Amazon-Server-SDK verwendet das Log4net-Framework zur Ausgabe von Protokollnachrichten. Es ist standardmäßig so konfiguriert, dass Nachrichten an das Terminal eines Server-Builds ausgegeben werden. Unity benötigt jedoch eine Konfiguration, um Unterstützung für die Dateiprotokollierung hinzuzufügen. Sie können diese Unterstützung zu Ihrem Projekt hinzufügen, indem Sie das bereitgestellte Beispiel in das Amazon GameLift Server SDK-Paket importieren. Gehen Sie wie folgt vor, um das Beispiel hinzuzufügen und log4net zu konfigurieren:

Um log4net für die Dateiausgabe zu konfigurieren
  1. Öffnen Sie Ihr Projekt im Unity-Editor, rufen Sie das Hauptmenü auf und wählen Sie Fenster, Paketmanager aus.

  2. Wählen Sie im Dropdownmenü Pakete: In Project aus und wählen Sie dann Amazon GameLift Server SDK aus der Paketliste aus. Dadurch werden die Paketdetails geöffnet.

  3. Wählen Sie in den Paketdetails die Gruppenoption Samples aus und klicken Sie auf Importieren.

  4. Die log4net.config Datei und das dazugehörige LoggingConfiguration.cs Skript führen automatisch die Konfiguration aus, die jetzt im Assets/Samples Projektordner eingerichtet ist.

    Anmerkung

    Wenn Sie Ihre log4net.config Datei in einen anderen Ordner im Projekt verschieben müssen, müssen Sie auch den Dateipfad der Konfigurationsdatei im Skript LoggingConfiguration.cs mit dem neuen Pfad aktualisieren. Weitere Informationen finden Sie im log4net-Handbuch zur Konfiguration von log4net.

Ausführlichere Anweisungen und Anleitungen zum Testen finden Sie im Download, der README sich im Plugin befindet.

Richten Sie eine GameLift Anywhere Amazon-Flotte zum Testen ein

Sie können Ihre Entwicklungs-Workstation als GameLift Anywhere Amazon-Hosting-Flotte einrichten, um Ihre GameLift Amazon-Integration iterativ zu testen. Mit dieser Konfiguration können Sie Spieleserverprozesse auf Ihrer Workstation starten, Spielerbeitritts- oder Matchmaking-Anfragen an Amazon senden, um Spielsitzungen GameLift zu starten, und Clients mit den neuen Spielsitzungen verbinden. Wenn Sie Ihre eigene Workstation als Hosting-Server einrichten, können Sie alle Aspekte Ihrer Spieleintegration mit Amazon GameLift überwachen.

Anweisungen zur Einrichtung Ihrer Workstation finden Sie unter Richten Sie lokale Tests mit Amazon ein GameLift Anywhere So führen Sie die folgenden Schritte durch:

  1. Erstellen Sie einen benutzerdefinierten Speicherort für Ihre Workstation.

  2. Erstellen Sie eine GameLift Anywhere Amazon-Flotte mit Ihrem neuen benutzerdefinierten Standort. Bei Erfolg gibt diese Anfrage eine Flottennummer zurück. Notieren Sie sich diesen Wert, da Sie ihn später benötigen werden.

  3. Registrieren Sie Ihre Workstation als Computer in der neuen Anywhere Flotte. Geben Sie einen eindeutigen Computernamen und die IP-Adresse für Ihre Workstation an. Bei Erfolg gibt diese Anfrage einen Service SDK-Endpunkt in Form einer WebSocket URL zurück. Notieren Sie sich diesen Wert, da Sie ihn später benötigen werden.

  4. Generieren Sie ein Authentifizierungstoken für Ihren Workstation-Computer. Diese kurzlebige Authentifizierung umfasst das Token und ein Ablaufdatum. Ihr Spieleserver verwendet es, um die Kommunikation mit dem GameLift Amazon-Service zu authentifizieren. Speichern Sie die Authentifizierung auf Ihrem Workstation-Computer, damit Ihre laufenden Spieleserver-Prozesse darauf zugreifen können.

Fügen Sie Ihrem Unity-Projekt GameLift Amazon-Servercode hinzu

Ihr Spieleserver kommuniziert mit dem GameLift Amazon-Service, um Anweisungen zu erhalten und den aktuellen Status zu melden. Um dies zu erreichen, fügen Sie Spieleservercode hinzu, der das GameLift Amazon-Server-SDK verwendet.

Das bereitgestellte Codebeispiel veranschaulicht die grundlegenden erforderlichen Integrationselemente. Es verwendet aMonoBehavior, um eine einfache Gameserver-Initialisierung mit Amazon GameLift zu veranschaulichen. Das Beispiel geht davon aus, dass der Spieleserver zum Testen auf einer GameLift Anywhere Amazon-Flotte läuft. Es beinhaltet Code für:

  • Initialisieren Sie einen GameLift Amazon-API-Client. Das Beispiel verwendet die Version von InitSDK() mit Serverparametern für Ihre Anywhere Flotte und Rechenleistung. Verwenden Sie die WebSocket URL, die Flotten-ID, den Computernamen (Host-ID) und das Authentifizierungstoken, wie im vorherigen Thema definiertRichten Sie eine GameLift Anywhere Amazon-Flotte zum Testen ein.

  • Implementieren Sie Rückruffunktionen, um auf Anfragen vom GameLift Amazon-Service zu antworten, einschließlich OnStartGameSessionOnProcessTerminate, undonHealthCheck.

  • Rufen Sie ProcessReady () mit einem bestimmten Port an, um den GameLift Amazon-Service zu benachrichtigen, wenn der Prozess bereit ist, Spielsitzungen abzuhalten.

Der in diesem Thema vorgestellte Code stellt die Kommunikation mit dem GameLift Amazon-Service her und. Es implementiert auch eine Reihe von Rückruffunktionen, die auf Anfragen von antworten. Weitere Informationen zu den einzelnen Funktionen und zur Funktionsweise des Codes finden Sie unter Initialisieren des Serverprozesses. Weitere Informationen zu den in diesem Code verwendeten SDK-Aktionen und Datentypen finden Amazon GameLift Server-SDK-Referenz für C# Sie unter.

Dieses Beispiel zeigt, wie Sie alle erforderlichen Elemente hinzufügen, wie unter Amazon GameLift zu Ihrem Spieleserver hinzufügen beschrieben. Es beinhaltet:

Weitere Informationen zum Hinzufügen von GameLift Amazon-Funktionen finden Sie in den folgenden Themen:

using System.Collections.Generic; using Aws.GameLift.Server; using UnityEngine; public class ServerSDKManualTest : MonoBehaviour { //This example is a simple integration that initializes a game server process //that is running on an Amazon GameLift Anywhere fleet. void Start() { //Identify port number (hard coded here for simplicity) the game server is listening on for player connections var listeningPort = 7777; //WebSocketUrl from RegisterHost call var webSocketUrl = "wss://us-west-2.api.amazongamelift.com"; //Unique identifier for this process var processId = "myProcess"; //Unique identifier for your host that this process belongs to var hostId = "myHost"; //Unique identifier for your fleet that this host belongs to var fleetId = "myFleet"; //Authorization token for this host process var authToken = "myAuthToken"; //Server parameters are required for a GameLift Anywhere fleet. //They are not required for a GameLift managed EC2 fleet. ServerParameters serverParameters = new ServerParameters( webSocketUrl, processId, hostId, fleetId, authToken); //InitSDK establishes a local connection with an Amazon GameLift agent //to enable further communication. var initSDKOutcome = GameLiftServerAPI.InitSDK(serverParameters); if (initSDKOutcome.Success) { //Implement callback functions ProcessParameters processParameters = new ProcessParameters( //Implement OnStartGameSession callback (gameSession) => { //GameLift sends a game session activation request to the game server //with game session object containing game properties and other settings. //Here is where a game server takes action based on the game session object. //When the game server is ready to receive incoming player connections, //it invokes the server SDK call ActivateGameSession(). GameLiftServerAPI.ActivateGameSession(); }, (updateGameSession) => { //GameLift sends a request when a game session is updated (such as for //FlexMatch backfill) with an updated game session object. //The game server can examine matchmakerData and handle new incoming players. //updateReason explains the purpose of the update. }, () => { //Implement callback function OnProcessTerminate //GameLift invokes this callback before shutting down the instance hosting this game server. //It gives the game server a chance to save its state, communicate with services, etc., //and initiate shut down. When the game server is ready to shut down, it invokes the //server SDK call ProcessEnding() to tell GameLift it is shutting down. GameLiftServerAPI.ProcessEnding(); }, () => { //Implement callback function OnHealthCheck //GameLift invokes this callback approximately every 60 seconds. //A game server might want to check the health of dependencies, etc. //Then it returns health status true if healthy, false otherwise. //The game server must respond within 60 seconds, or GameLift records 'false'. //In this example, the game server always reports healthy. return true; }, //The game server gets ready to report that it is ready to host game sessions //and that it will listen on port 7777 for incoming player connections. listeningPort, new LogParameters(new List<string>() { //Here, the game server tells GameLift where to find game session log files. //At the end of a game session, GameLift uploads everything in the specified //location and stores it in the cloud for access later. "/local/game/logs/myserver.log" })); //The game server calls ProcessReady() to tell GameLift it's ready to host game sessions. var processReadyOutcome = GameLiftServerAPI.ProcessReady(processParameters); if (processReadyOutcome.Success) { print("ProcessReady success."); } else { print("ProcessReady failure : " + processReadyOutcome.Error.ToString()); } } else { print("InitSDK failure : " + initSDKOutcome.Error.ToString()); } } void OnApplicationQuit() { //Make sure to call GameLiftServerAPI.ProcessEnding() and GameLiftServerAPI.Destroy() before terminating the server process. //These actions notify Amazon GameLift that the process is terminating and frees the API client from memory. GenericOutcome processEndingOutcome = GameLiftServerAPI.ProcessEnding(); GameLiftServerAPI.Destroy(); if (processEndingOutcome.Success) { Environment.Exit(0); } else { Console.WriteLine("ProcessEnding() failed. Error: " + processEndingOutcome.Error.ToString()); Environment.Exit(-1); } } }

Weitere Ressourcen

Verwenden Sie die folgenden Ressourcen, um Ihren Spieleserver zu testen und die Funktionalität zu erweitern: