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.
Plugin für Unity: Stelle dein Spiel in einer verwalteten Containerflotte bereit
Verwende diesen geführten Plugin-Workflow, um ein Container-Image für deinen Spieleserver zu erstellen und es auf einer containerbasierten Hosting-Lösung bereitzustellen. Wenn du diesen Workflow erfolgreich abgeschlossen hast, läuft dein containerisierter Spieleserver in der Cloud und du kannst das Plugin verwenden, um einen Spielclient zu starten, eine Verbindung zu einer Spielesitzung herzustellen und das Spiel zu spielen.
Bevor Sie beginnen
Bei diesem Arbeitsablauf wird davon ausgegangen, dass du die folgenden Aufgaben abgeschlossen hast.
-
Integrieren Sie Ihren Spieleservercode in das Amazon GameLift Servers Server-SDK. Unser gehosteter Spieleserver muss in der Lage sein, mit dem Amazon GameLift Servers Dienst zu kommunizieren, damit er auf Anfragen zum Starten neuer Spielsitzungen reagieren und den Status der Spielsitzung melden kann. Wenn du diese Aufgabe nicht abgeschlossen hast, empfehlen wir dir, zuerst dem Plugin-Workflow Host with Anywhere zu folgen. Eine Anleitung zur Vorbereitung Ihres Spieleservercodes finden Sie unterIntegrieren Sie Ihren Servercode. Für eine verwaltete Containerflotte musst du dein Spiel in das Server-SDK Version 5.2 oder höher integrieren.
Anmerkung
Wenn du das Beispielspiel importiert hast, ist diese Aufgabe bereits für dich erledigt.
-
Packen Sie die ausführbare Datei Ihres Spielservers so, dass sie unter Linux ausgeführt werden kann.
-
Sammle Dateien, die du zusammen mit deinem Spieleserver-Build bereitstellen kannst. Erstelle auf deinem lokalen Computer ein Arbeitsverzeichnis, um die Dateien zu organisieren, die in dein Gameserver-Container-Image eingebaut werden. Dazu können Spielabhängigkeiten, ein Skript zum Starten von Spieleservern und andere Prozesse beim Starten eines Containers usw. gehören.
-
Integriere deinen Spiel-Client-Code mitAmazon GameLift Servers. Eine Möglichkeit, diese Aufgabe abzuschließen, besteht darin, ein Beispiel-Asset (im Plugin enthalten) hinzuzufügen, das bereits integriert ist. Eine Anleitung zur Vorbereitung deines Spiel-Client-Codes findest du unterIntegrieren Sie Ihren Kundencode.
-
Installiere Docker auf deinem lokalen Computer. Sie müssen dieses Tool installiert haben, wenn das Plugin Container-Images für Sie erstellen und sie in ein ECR-Repository übertragen soll. Alternativ können Sie diese Aufgaben manuell ausführen und das Plugin anweisen, ein vorhandenes Container-Image zu verwenden. Weitere Informationen zum manuellen Erstellen Ihres Images finden Sie unterErstellen Sie ein Container-Image für Amazon GameLift Servers.
Um das zu starten GameLift Amazon-Server Arbeitsablauf für verwaltete Container:
Wählen Sie in der Hauptsymbolleiste des Unity-Editors das Amazon GameLift Servers Menü und dann Verwaltete Container aus. Durch diese Aktion wird die Plugin-Seite Host with Managed Containers geöffnet, auf der Schritt für Schritt beschrieben wird, wie Sie ein Container-Image mit Ihrem Spieleserver-Build erstellen, es in einer Container-Flotte bereitstellen und Ihr Spiel starten.
Schritt 0: Lege dein Profil fest
In diesem Abschnitt wird Ihr aktuell ausgewähltes Benutzerprofil angezeigt. Stellen Sie sicher, dass das aktuelle Benutzerprofil das ist, das Sie für diesen Workflow verwenden möchten. Alle Ressourcen, die Sie in diesem Workflow erstellen, sind dem AWS Konto des Profils zugeordnet und befinden sich in der AWS Standardregion des Profils. Die Berechtigungen des Profilbenutzers bestimmen Ihren Zugriff auf AWS Ressourcen und Aktionen.
In den folgenden Fällen müssen Sie das ausgewählte Benutzerprofil möglicherweise ändern:
-
Derzeit ist kein Profil ausgewählt.
-
Sie möchten ein anderes Profil auswählen oder ein neues Profil erstellen.
-
Sie müssen das ausgewählte Profil booten (wenn der Bootstrap-Status inaktiv ist).
Um das ausgewählte Benutzerprofil festzulegen oder zu ändern
-
Wählen Sie im Amazon GameLift Servers Menü Open AWS Access Credentials aus.
Schritt 1: Beurteilen Sie die Eignung des Containers
Bevor Sie Ihren Spieleserver in einer Containerflotte bereitstellen, müssen Sie ihn in ein Container-Image packen und in einem Amazon ECR-Repository speichern. Das Plugin kann diese Aufgaben für dich erledigen oder du kannst diese Aufgaben manuell erledigen. Geben Sie in diesem Schritt Informationen zum Status Ihres Container-Images und des ECR-Repositorys an.
Teilen Sie dem Plugin anhand der Bewertungsfragen mit, welche Schritte es ergreifen muss:
-
Erstellen Sie ein neues Container-Image. Wenn du diese Option wählst, wirst du im nächsten Schritt nach dem Speicherort deines Spieleserver-Build-Verzeichnisses und der ausführbaren Build-Datei gefragt. Das Plugin verwendet eine Dockerfile-Vorlage (bereitgestellt vonAmazon GameLift Servers) und konfiguriert sie automatisch für dein Spiel. Du kannst die Vorlage unter ansehen. Erstellen Sie ein Container-Image für Amazon GameLift Servers Nachdem Sie diese Option ausgewählt haben, geben Sie an, wo das Plugin das neue Bild speichern soll:
-
Erstellen Sie ein neues Amazon ECR-Repository und übertragen Sie das Container-Image dorthin. Das Plugin erstellt ein privates ECR-Repo unter Verwendung des AWS Kontos und der Standardeinstellung AWS-Region in Ihrem ausgewählten Benutzerprofil.
-
Verschieben Sie das Container-Image in ein zuvor erstelltes Amazon ECR-Repository. Wenn Sie diese Option wählen, werden Sie im nächsten Schritt aufgefordert, ein vorhandenes Amazon ECR-Repository aus einer Liste auszuwählen. Die Liste enthält alle Amazon ECR-Repositorys für das AWS Konto und die Standard-Repositorys AWS-Region in Ihrem ausgewählten Benutzerprofil. Sie können ein öffentliches oder privates Repository auswählen.
-
-
Verwenden Sie ein vorhandenes Container-Image. Wenn Sie ein Image manuell erstellt haben, empfehlen wir Ihnen, die von bereitgestellte Dockerfile-Vorlage zu verwendenAmazon GameLift Servers, die unter verfügbar ist. Erstellen Sie ein Container-Image für Amazon GameLift Servers Nachdem Sie diese Option ausgewählt haben, geben Sie an, wo sich das Image befindet.
Ein lokal gespeichertes Docker-generated Bild. Wenn Sie diese Option wählen, erstellt das Plugin ein neues privates Amazon ECR-Repository und überträgt die lokale Image-Datei dorthin. Im nächsten Schritt werden Sie zur Eingabe einer Image-ID aufgefordert, die das Plugin verwendet, um die Image-Datei zu finden.
Ein Container-Image, das bereits in einem Amazon ECR-Repository gespeichert ist. Wenn Sie diese Option wählen, werden Sie im nächsten Schritt aufgefordert, ein vorhandenes Amazon ECR-Repository und ein Image aus einer Liste auszuwählen. Die Liste enthält alle Amazon ECR-Repositorys für das AWS Konto und die Standard-Repositorys AWS-Region in Ihrem ausgewählten Benutzerprofil. Sie können ein öffentliches oder privates Repository auswählen.
Unity 6.3 unter Linux erfordert Glibc 2.35. Amazon Linux 2023 beinhaltet Glibc 2.34. Im Folgenden finden Sie eine Dockerfile-Vorlage, die das Erstellen von Glibc 2.35 aus dem Quellcode und die Konfiguration der Unity-Binärdateien für die Verwendung von Glibc 2.35 behandelt.
Diese Vorlage enthält die Mindestanweisungen, die ein Gameserver-Container benötigt, um in einer Amazon GameLift Servers Flotte verwendet werden zu können. Ändere den Inhalt nach Bedarf für deinen Spieleserver.
# Base image # ---------- # Add the base image that you want to use over here, # Make sure to use an image with the same architecture as the # Instance type you are planning to use on your fleets. FROM public.ecr.aws/amazonlinux/amazonlinux # Game build directory # -------------------- # Add your game build directory in the 'GAME_BUILD_DIRECTORY' env variable below. # # Game executable # --------------- # Add the relative path to your executable in the 'GAME_EXECUTABLE' env variable below. # The game build provided over here needs to be integrated with gamelift server sdk. # This template assumes that the executable path is relative to the game build directory. # # Launch parameters # ----------------- # Add any launch parameters to pass into your executable in the 'LAUNCH_PARAMS' env variable below. # # Default directory # ----------------- # The value provided in 'HOME_DIR' below will be where the game executable and logs exist. # ARG GAME_BUILD_DIRECTORY ARG GAME_EXECUTABLE ARG LAUNCH_PARAMS ENV GAME_BUILD_DIRECTORY=$GAME_BUILD_DIRECTORY \ GAME_EXECUTABLE=$GAME_EXECUTABLE \ LAUNCH_PARAMS=$LAUNCH_PARAMS \ HOME_DIR="/local/game" # install dependencies as necessary RUN yum install -y shadow-utils bison wget gcc make patchelf tar gzip && \ yum clean all && rm -fr /var/cache RUN mkdir -p $HOME_DIR COPY .$GAME_BUILD_DIRECTORY/ $HOME_DIR # Change directory to home WORKDIR $HOME_DIR # Build glibc 2.35 and patch Unity binaries RUN GLIBC_VERSION="2.35" && \ INSTALL_PREFIX="/opt/glibc-${GLIBC_VERSION}" && \ ARCH=$(uname -m) && \ if [ "$ARCH" = "x86_64" ]; then \ INTERPRETER="${INSTALL_PREFIX}/lib/ld-linux-x86-64.so.2"; \ MONO_ARCH="x86_64"; \ elif [ "$ARCH" = "aarch64" ]; then \ INTERPRETER="${INSTALL_PREFIX}/lib/ld-linux-aarch64.so.1"; \ MONO_ARCH="aarch64"; \ else \ echo "ERROR: Unsupported architecture: $ARCH"; exit 1; \ fi && \ cd /tmp && \ wget -q "https://ftp.gnu.org/gnu/glibc/glibc-${GLIBC_VERSION}.tar.gz" && \ tar -xzf "glibc-${GLIBC_VERSION}.tar.gz" && \ cd "glibc-${GLIBC_VERSION}" && mkdir glibc-build && cd glibc-build && \ touch /etc/ld.so.conf && \ ../configure --prefix="${INSTALL_PREFIX}" && \ make -s all && make -s install && \ cd / && rm -rf /tmp/glibc-* && \ GLIBC_LIB="${INSTALL_PREFIX}/lib" && \ EXECUTABLE_NAME=$(echo "$GAME_EXECUTABLE" | sed 's/\.[^.]*$//') && \ DATA_DIR="$HOME_DIR/${EXECUTABLE_NAME}_Data" && \ patchelf --set-interpreter "$INTERPRETER" "$HOME_DIR/$GAME_EXECUTABLE" && \ patchelf --set-rpath "$GLIBC_LIB:$HOME_DIR:/lib64:$DATA_DIR/MonoBleedingEdge/$MONO_ARCH" "$HOME_DIR/$GAME_EXECUTABLE" && \ patchelf --set-rpath "$GLIBC_LIB:/lib64" "$HOME_DIR/UnityPlayer.so" && \ MONO_LIB="$DATA_DIR/MonoBleedingEdge/$MONO_ARCH/libmonobdwgc-2.0.so" && \ if [ -f "$MONO_LIB" ]; then patchelf --set-rpath "$GLIBC_LIB:/lib64" "$MONO_LIB"; fi && \ GAME_ASSEMBLY="$HOME_DIR/GameAssembly.so" && \ if [ -f "$GAME_ASSEMBLY" ]; then patchelf --set-rpath "$GLIBC_LIB:/lib64" "$GAME_ASSEMBLY"; fi RUN useradd -m gamescale && \ echo "gamescale ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers && \ chown -R gamescale:gamescale $HOME_DIR # Add permissions to game build RUN chmod +x ./$GAME_EXECUTABLE USER gamescale # Check directory before starting the container RUN ls -lhrt . # Check path before starting the container RUN echo $PATH # Start the game build ENTRYPOINT ["/bin/sh", "-c", "./$GAME_EXECUTABLE $LAUNCH_PARAMS"]
Schritt 2: Konfiguriere die Image-Bereitstellung
Geben Sie in diesem Schritt Informationen an, die das Plugin benötigt, um Ihr Container-Image für eine Containerflotte bereitzustellen. In diesem Schritt werden die folgenden Informationen angefordert:
-
Der Speicherort Ihres Spieleserver-Builds, Ihres Container-Images oder Ihres Amazon ECR-Repositorys, basierend auf Ihrer Auswahl in Schritt 1.
-
Das Szenario, das Sie für Ihre Bereitstellung verwalteter Container verwenden sollten.
-
Optionale Bereitstellungseinstellungen. Dieser Abschnitt enthält Konfigurationseinstellungen, die das Plugin standardmäßig verwendet. Sie können diese ändern oder die Standardwerte beibehalten.
Der Spielname ist standardmäßig auf den Namen Ihres Spielprojekts gesetzt. Alle AWS Ressourcen, die das Plugin erstellt, verweisen auf den Wert des Spielnamens.
Portbereich, Speicherlimit und vCPU-Limit sind Konfigurationseinstellungen für die Containerflotte. Weitere Informationen zum Anpassen dieser Werte finden Sie unter Informationen Netzwerkverbindungen konfigurieren zum Verbindungsportbereich und zu Legen Sie Ressourcenlimits fest Ressourcenbeschränkungen.
Das Container-Image-Tag wird verwendet, um Ihre Container-Bilder in Amazon ECR zu kategorisieren. Der Standardwert ist
unity-gamelift-plugin.
Optionen für Bereitstellungsszenarien
In diesem Szenario wird dein Spielserver in einer einzigen Containerflotte eingesetzt. Es ist ein guter Ausgangspunkt, um deine Serverintegration AWS und deine Container-Konfiguration zu testen. Es stellt die folgenden Ressourcen bereit.
-
Amazon GameLift ServersDie Containergruppendefinition beschreibt, wie Sie Ihre Container-Images auf einer Containerflotte bereitstellen und ausführen.
-
Amazon GameLift Serverscontainer fleet (On-Demand) mit installiertem und laufendem Gameserver-Container, mit Alias.
-
Amazon Cognito-Benutzerpool und -Client, der es Spielern ermöglicht, sich zu authentifizieren und ein Spiel zu starten.
-
API Gateway-Autorisierer, der den Benutzerpool mit APIs verknüpft.
-
Web Access Control List (ACL) zur Drosselung übermäßiger Player-Aufrufe an das API Gateway.
-
Backend-Dienst, um im Namen von Spielclients Anfragen an den Amazon GameLift Servers Dienst zu stellen, z. B. um Spielsitzungen anzufordern und an Spielen teilzunehmen:
-
API Gateway + Lambda-Funktion, mit der Spieler einen Slot für eine Spielsitzung anfordern können. Diese Funktion wird aufgerufen
CreateGameSession(), wenn keine offenen Slots verfügbar sind. -
API Gateway + Lambda-Funktion, mit der Spieler Verbindungsinformationen für ihre Spielanfrage abrufen können.
-
In diesem Szenario wird dein Spielserver in einer Containerflotte eingesetzt, die Platzierung der Spielsitzungen konfiguriert und die Spielersuche eingerichtetFlexMatch. Dieses Szenario ist nützlich, wenn Sie bereit sind, einen benutzerdefinierten Matchmaker für Ihre Hosting-Lösung zu entwerfen. Verwenden Sie dieses Szenario, um die grundlegenden Ressourcen für diese Lösung zu erstellen, die Sie später nach Bedarf anpassen können. Es stellt die folgenden Ressourcen bereit:
-
Amazon GameLift ServersContainergruppendefinition, die beschreibt, wie Sie Ihre Container-Images auf einer Containerflotte bereitstellen und ausführen.
-
Amazon GameLift Serverscontainer fleet (On-Demand) mit installiertem und laufendem Gameserver-Container, mit Alias.
-
FlexMatchMatchmaking-Konfiguration und Matchmaking-Regelsatz zur Annahme von Spieleranfragen und zur Bildung von Matches.
-
Amazon GameLift ServersWarteschlange für Spielsitzungen, die Anfragen für vorgeschlagene Spiele erfüllt, indem sie die bestmögliche Hosting-Ressource findet (basierend auf Rentabilität, Kosten, Spielerlatenz usw.) und eine Spielsitzung startet.
-
Amazon Cognito-Benutzerpool und -Client, der es Spielern ermöglicht, sich zu authentifizieren und ein Spiel zu starten.
-
API Gateway-Autorisierer, der den Benutzerpool mit APIs verknüpft.
-
Web Access Control List (ACL) zur Drosselung übermäßiger Player-Aufrufe an das API Gateway.
-
Backend-Dienst, um im Namen von Spielclients Anfragen an den Amazon GameLift Servers Dienst zu stellen, z. B. um Spielsitzungen anzufordern und an Spielen teilzunehmen:
-
API Gateway + Lambda-Funktion, mit der Spieler einen Slot für eine Spielsitzung anfordern können. Diese Funktion wird aufgerufen
StartMatchmaking(), wenn keine offenen Slots verfügbar sind. -
API Gateway + Lambda-Funktion, mit der Spieler Verbindungsinformationen für ihre Spielanfrage abrufen können.
-
-
DynamoDB-Tabellen zum Speichern von Matchmaking-Tickets für Spieler und Informationen zur Spielsitzung.
-
Amazon SNS-Thema + Lambda-Funktion zur Behandlung von Ereignissen. GameSessionQueue
Setzen Sie die Containerflotte ein
Wenn Ihre Flottenkonfiguration abgeschlossen ist, klicken Sie auf die Schaltfläche Containerflotte bereitstellen, um die Bereitstellung zu starten. Dieser Vorgang kann mehrere Minuten dauern, bis das Plugin ein Container-Image erstellt und es an ECR weiterleitet, Hosting-Ressourcen für die Containerflotte bereitstellt, die Flotte und andere AWS Ressourcen für das gewählte Hosting-Lösungsszenario bereitstellt.
Wenn Sie eine Bereitstellung starten, können Sie den Fortschritt jedes Schritts verfolgen. Je nach Ihrer Konfiguration können die Schritte Folgendes beinhalten:
Container-Image konfigurieren
Erstellen eines Amazon ECR-Repositorys
Ein Image erstellen und an Amazon ECR übertragen
Eine Containergruppendefinition erstellen
Containerflotte erstellen
Für detailliertere Informationen zur Bereitstellung wählen Sie in der AWS Management Console die Option Anzeigen. Wenn die Containerflotte den Status „Aktiv“ erreicht, laufen auf der Flotte aktiv Container mit Serverprozessen, die bereit sind, Spielsitzungen abzuhalten.
Wenn die Bereitstellung abgeschlossen ist, verfügen Sie über eine funktionierende Containerflotte, die bereit ist, Spielsitzungen zu hosten und Spielerverbindungen anzunehmen.
Sie können einen laufenden Einsatz nicht stoppen. Wenn die Bereitstellung in einen schlechten Zustand gerät oder fehlschlägt, können Sie mit der Option Bereitstellung zurücksetzen von vorne beginnen.
Starten Sie den Client
Zu diesem Zeitpunkt hast du alle Aufgaben abgeschlossen, um dein Multiplayer-Spiel zu starten und zu spielen, auf dem das Spiel gehostet wirdAmazon GameLift Servers. Um dein Spiel zu spielen, wähle Startclient, um eine lokale Instanz deines Spielclients zu starten.
-
Wenn du das Szenario mit einer Flotte eingesetzt hast, öffne eine Instanz deines Spielclients mit einem Spieler und gib die Serverkarte ein, um dich fortzubewegen. Du kannst eine zweite Instanz des Spielclients öffnen, um einen zweiten Spieler zur gleichen Serverspielkarte hinzuzufügen.
-
Wenn du das FlexMatch Szenario bereitgestellt hast, wartet die Hosting-Lösung darauf, dass mindestens zwei Spielclients Matchmaking-Anfragen stellen. Öffne mindestens zwei Instanzen deines Spielclients mit einem Spieler. Die beiden Spieler werden verglichen und aufgefordert, an einer Spielsitzung für das Spiel teilzunehmen.
Aktualisiere eine Containerflotte
Wenn Sie eine Hosting-Lösung für verwaltete Container erfolgreich bereitgestellt haben, können Sie die Funktion „Bereitstellung aktualisieren“ verwenden. Mit dieser Option können Sie die Konfigurationseinstellungen für eine bereitgestellte Containerflotte aktualisieren, ohne eine neue Flotte erstellen zu müssen.
Wenn Sie eine Bereitstellung aktualisieren, können Sie ein Container-Image mit einem anderen Spieleserver-Build bereitstellen, das Amazon ECR-Repository ändern, ein anderes Bereitstellungsszenario wählen und optionale Konfigurationseinstellungen anpassen.
Wenn Sie bereit sind, Ihre Änderungen bereitzustellen, wählen Sie Update. Die Zeit, die für ein Deployment-Update benötigt wird, ist vergleichbar mit einer vollständigen Bereitstellung. Für detaillierte Informationen zur Bereitstellung wählen Sie in der AWS Management Console die Option Anzeigen.
Bereinigen Sie die bereitgestellten Ressourcen
Es hat sich bewährt, die AWS Ressourcen für Ihre Managed-Container-Lösung zu bereinigen, sobald Sie sie nicht mehr benötigen. Möglicherweise entstehen Ihnen weiterhin Kosten für diese Ressourcen, wenn Sie sie nicht entfernen.
Löschen Sie die folgenden Ressourcen:
Verwalteter Container-Ressourcenstapel. Die Ressourcen in diesem Stapel hängen vom ausgewählten Bereitstellungsszenario ab. Verwenden Sie die CloudFormation Konsole, um den gesamten Stack zu löschen. Stapel, die mit dem Amazon GameLift Servers Plugin generiert werden, verwenden die folgende Namenskonvention:
GameLiftPluginForUnity-{GameName}-Containers. Warten Sie, bis der Stack-Löschvorgang abgeschlossen ist, bevor Sie eine neue Bereitstellung verwalteter Container im Plugin initiieren. Weitere Informationen finden Sie unter Löschen eines Stacks aus der CloudFormation Konsole.Amazon ECR-Repository. Wenn Sie das Plugin verwendet haben, um ein Repository für Ihr Container-Image zu erstellen, möchten Sie möglicherweise alle Repositorys löschen, die nicht mehr benötigt werden. Sie müssen kein Repository löschen, bevor Sie eine Bereitstellung verwalteter Container zurücksetzen. Wenn Sie eine Bereitstellung aktualisieren oder zurücksetzen, verwendet das Plugin automatisch dasselbe Repository, sofern Sie nicht angewiesen werden, ein anderes zu verwenden. Weitere Informationen finden Sie unter Löschen eines privaten Repositorys in Amazon ECR.