View a markdown version of this page

Plugin per Unity: distribuisci il gioco su una flotta di container gestita - GameLift Server Amazon

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Plugin per Unity: distribuisci il gioco su una flotta di container gestita

Usa questo flusso di lavoro guidato del plug-in per creare un'immagine del contenitore per il tuo server di gioco e distribuirla su una soluzione di hosting basata su container. Una volta completato con successo questo flusso di lavoro, il server di gioco containerizzato è in esecuzione nel cloud e puoi utilizzare il plug-in per avviare un client di gioco, connetterti a una sessione di gioco e giocare.

Prima di iniziare

Questo flusso di lavoro presuppone che tu abbia completato le seguenti attività.

  • Integra il codice del server di gioco con l'SDK Amazon GameLift Servers del server. il nostro server di gioco ospitato deve essere in grado di comunicare con il Amazon GameLift Servers servizio in modo che possa rispondere alle richieste di avvio di nuove sessioni di gioco e segnalare lo stato della sessione di gioco. Se non hai completato questa operazione, ti consigliamo di seguire prima il flusso di lavoro del plugin Host with Anywhere. Per indicazioni su come preparare il codice del server di gioco, consultaIntegra il codice del tuo server. Per una flotta di container gestita, devi integrare il gioco con l'SDK del server versione 5.2 o successiva.

    Nota

    Se hai importato il gioco di esempio, questa operazione è già stata eseguita per te.

  • Crea un pacchetto eseguibile sul tuo server di gioco in modo che funzioni su Linux.

  • Raccogli i file da distribuire con la build del tuo server di gioco. Sul tuo computer locale, crea una directory di lavoro per organizzare i file, che verrà incorporata nell'immagine del contenitore del tuo server di gioco. Questi potrebbero includere dipendenze di gioco, uno script per avviare i server di gioco e altri processi all'avvio di un contenitore, ecc.

  • Integra il codice del tuo client di gioco conAmazon GameLift Servers. Un modo per completare questa operazione è aggiungere una risorsa di esempio (inclusa nel plug-in) già integrata. Per indicazioni su come preparare il codice del client di gioco, consultaIntegra il tuo codice cliente.

  • Installa Docker sul tuo computer locale. È necessario che questo strumento sia installato se desideri che il plug-in crei immagini del contenitore per te e le invii a un repository ECR. In alternativa, puoi eseguire queste attività manualmente e indicare al plug-in di utilizzare un'immagine del contenitore esistente. Per ulteriori informazioni sulla creazione manuale dell'immagine, consultaCrea un'immagine del contenitore per Amazon GameLift Servers.

Per iniziare GameLift Server Amazon flusso di lavoro con contenitori gestiti:
  • Nella barra degli strumenti principale dell'editor Unity, scegli il Amazon GameLift Servers menu e seleziona Contenitori gestiti. Questa azione apre la pagina del plugin Host with Managed Containers, che presenta una procedura dettagliata per creare un'immagine del contenitore con la build del server di gioco, distribuirla su una flotta di container e avviare il gioco.

Fase 0: Imposta il tuo profilo

Questa sezione mostra il profilo utente attualmente selezionato. Verifica che il profilo utente corrente sia quello che desideri utilizzare per questo flusso di lavoro. Tutte le risorse create in questo flusso di lavoro sono associate all' AWS account del profilo e sono collocate nella AWS regione predefinita del profilo. Le autorizzazioni dell'utente del profilo determinano l'accesso alle AWS risorse e alle azioni.

Potrebbe essere necessario modificare il profilo utente selezionato se:

  • Al momento non è selezionato alcun profilo.

  • Vuoi selezionare un profilo diverso o creare un nuovo profilo.

  • È necessario eseguire il bootstrap del profilo selezionato (se lo stato di bootstrap è inattivo).

Per impostare o modificare il profilo utente selezionato
  • Nel Amazon GameLift Servers menu, scegli Open AWS Access Credentials.

Fase 1: Valuta la disponibilità dei contenitori

Prima di distribuire il tuo server di gioco su una flotta di container, devi impacchettarlo in un'immagine del container e archiviarlo in un repository Amazon ECR. Il plug-in può completare queste attività per te oppure puoi eseguirle manualmente. In questo passaggio, fornisci informazioni sullo stato dell'immagine del contenitore e del repository ECR.

Usa le domande di valutazione per indicare al plugin quali misure deve intraprendere:

  • Crea una nuova immagine del contenitore. Se scegli questa opzione, il passaggio successivo ti chiederà la posizione della directory di build del server di gioco e dell'eseguibile di build. Il plugin utilizza un modello Dockerfile (fornito daAmazon GameLift Servers) e lo configura automaticamente per il tuo gioco. Puoi visualizzare il modello all'indirizzo. Crea un'immagine del contenitore per Amazon GameLift Servers Dopo aver scelto questa opzione, indica dove desideri che il plugin memorizzi la nuova immagine:

    • Crea un nuovo repository Amazon ECR e inviaci l'immagine del contenitore. Il plug-in crea un repository ECR privato utilizzando l' AWS account e l'impostazione predefinita Regione AWS nel profilo utente selezionato.

    • Invia l'immagine del contenitore a un repository Amazon ECR creato in precedenza. Se scegli questa opzione, il passaggio successivo ti chiederà di selezionare un repository Amazon ECR esistente da un elenco. L'elenco include tutti i repository Amazon ECR per l' AWS account e quelli predefiniti Regione AWS nel profilo utente selezionato. Puoi selezionare un repository pubblico o privato.

  • Usa un'immagine del contenitore esistente. Se hai creato manualmente un'immagine, ti consigliamo di utilizzare il modello Dockerfile fornito daAmazon GameLift Servers, disponibile all'indirizzo. Crea un'immagine del contenitore per Amazon GameLift Servers Dopo aver scelto questa opzione, indica dove si trova l'immagine.

    • Un' Docker-generated immagine memorizzata localmente. Se scegli questa opzione, il plug-in crea un nuovo repository privato Amazon ECR e vi invia il file di immagine locale. Il passaggio successivo ti chiederà un ID dell'immagine, che il plug-in utilizza per localizzare il file di immagine.

    • Un'immagine del contenitore già archiviata in un repository Amazon ECR. Se scegli questa opzione, il passaggio successivo ti chiederà di selezionare un repository e un'immagine Amazon ECR esistenti da un elenco. L'elenco include tutti i repository Amazon ECR per l' AWS account e quelli predefiniti Regione AWS nel profilo utente selezionato. Puoi selezionare un repository pubblico o privato.

    • Unity 6.3 su Linux richiede glibc 2.35. Amazon Linux 2023 include glibc 2.34. Di seguito viene fornito un modello Dockerfile che gestisce la compilazione di glibc 2.35 dai sorgenti e la configurazione dei binari di Unity per l'uso di glibc 2.35.

Questo modello contiene le istruzioni minime di cui un container per server di gioco ha bisogno per essere utilizzato in una flotta. Amazon GameLift Servers Modifica il contenuto in base alle esigenze del tuo server di gioco.

# 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"]

Fase 2: Configurare la distribuzione delle immagini

In questo passaggio, fornisci le informazioni necessarie al plug-in per distribuire l'immagine del tuo container su una flotta di container. Questo passaggio richiede le seguenti informazioni:

  • La posizione della build del server di gioco, dell'immagine del contenitore o del repository Amazon ECR, in base alle selezioni effettuate nella Fase 1.

  • Lo scenario da utilizzare per la distribuzione dei container gestiti.

  • Impostazioni di distribuzione opzionali. Questa sezione contiene le impostazioni di configurazione che il plug-in utilizza per impostazione predefinita. Puoi modificarli o mantenere i valori predefiniti

    • Per impostazione predefinita, il nome del gioco è impostato sul nome del progetto di gioco. Tutte le AWS risorse create dal plugin fanno riferimento al valore del nome del gioco.

    • L'intervallo di porte, il limite di memoria e il limite di vCPU sono impostazioni di configurazione per la flotta di container. Per ulteriori informazioni sulla personalizzazione di questi valori, consulta Configurare le connessioni di rete l'intervallo delle porte di connessione e Imposta i limiti delle risorse i limiti delle risorse.

    • Il tag Container Image viene utilizzato per classificare le immagini del contenitore in Amazon ECR. Il valore predefinito è unity-gamelift-plugin.

Opzioni dello scenario di distribuzione

Questo scenario distribuisce il tuo server di gioco su una singola flotta di container. È un buon punto di partenza per testare l'integrazione del server AWS e la configurazione del container. Implementa le seguenti risorse.

  • Amazon GameLift ServersLa definizione del gruppo di container descrive come distribuire ed eseguire le immagini dei container su una flotta di container.

  • Amazon GameLift Serverscontainer fleet (On-Demand) con il container del server di gioco installato e funzionante, con alias.

  • Pool di utenti e client Amazon Cognito per consentire ai giocatori di autenticarsi e iniziare una partita.

  • Autorizzatore API Gateway che collega il pool di utenti alle API.

  • Elenco di controllo degli accessi Web (ACL) per limitare le chiamate eccessive dei giocatori ad API Gateway.

  • Servizio di backend per effettuare richieste al Amazon GameLift Servers servizio per conto dei client di gioco, ad esempio per richiedere sessioni di gioco e partecipare ai giochi:

    • Funzione API Gateway + Lambda per consentire ai giocatori di richiedere uno slot per una sessione di gioco. Questa funzione chiama CreateGameSession() se non sono disponibili slot aperti.

    • Funzione API Gateway + Lambda per consentire ai giocatori di ottenere informazioni di connessione per la loro richiesta di gioco.

Questo scenario distribuisce il server di gioco su una flotta di container, configura il posizionamento delle sessioni di gioco e imposta FlexMatch il matchmaking. Questo scenario è utile quando sei pronto per iniziare a progettare un matchmaker personalizzato per la tua soluzione di hosting. Usa questo scenario per creare le risorse di base per questa soluzione, che potrai personalizzare in seguito, se necessario. Implementa le seguenti risorse:

  • Amazon GameLift Serversdefinizione del gruppo di container che descrive come distribuire ed eseguire le immagini dei container su una flotta di container.

  • Amazon GameLift Serverscontainer fleet (On-Demand) con il container del server di gioco installato e funzionante, con alias.

  • FlexMatchconfigurazione del matchmaking e regole di matchmaking impostate per accettare le richieste dei giocatori e formare le partite.

  • Amazon GameLift Serverscoda di sessione di gioco che soddisfa le richieste di partite proposte trovando la migliore risorsa di hosting possibile (in base alla fattibilità, al costo, alla latenza del giocatore, ecc.) e avviando una sessione di gioco.

  • pool di utenti e client Amazon Cognito per consentire ai giocatori di autenticarsi e iniziare una partita.

  • Autorizzatore API Gateway che collega il pool di utenti alle API.

  • Elenco di controllo degli accessi Web (ACL) per limitare le chiamate eccessive dei giocatori ad API Gateway.

  • Servizio di backend per effettuare richieste al Amazon GameLift Servers servizio per conto dei client di gioco, ad esempio per richiedere sessioni di gioco e partecipare ai giochi:

    • Funzione API Gateway + Lambda per consentire ai giocatori di richiedere uno slot per una sessione di gioco. Questa funzione chiama StartMatchmaking() se non sono disponibili slot aperti.

    • Funzione API Gateway + Lambda per consentire ai giocatori di ottenere informazioni di connessione per la loro richiesta di gioco.

  • Tabelle DynamoDB per memorizzare i ticket di matchmaking per i giocatori e le informazioni sulle sessioni di gioco.

  • Argomento Amazon SNS + funzione Lambda per gestire gli eventi. GameSessionQueue

Implementa una flotta di container

Una volta completata la configurazione della flotta, scegli il pulsante Implementa flotta di container per avviare l'implementazione. Questo processo può richiedere diversi minuti, mentre il plug-in crea un'immagine del container e la invia a ECR, fornisce le risorse di hosting per la flotta di container, implementa la flotta e altre AWS risorse per lo scenario della soluzione di hosting selezionata.

Quando si avvia un'implementazione, è possibile monitorare lo stato di avanzamento di ogni passaggio. A seconda della configurazione, i passaggi potrebbero includere quanto segue:

  • Configurazione dell'immagine del contenitore

  • Creazione di un repository Amazon ECR

  • Creazione di un'immagine e invio ad Amazon ECR

  • Creazione di una definizione di gruppo di contenitori

  • Creazione di una flotta di container

Per informazioni più dettagliate sulla distribuzione, scegli Visualizza in AWS Management Console. Quando la flotta di container raggiunge lo stato attivo, la flotta gestisce attivamente i container con processi server pronti per ospitare sessioni di gioco.

Una volta completata la distribuzione, disponi di una flotta di container funzionante pronta per ospitare sessioni di gioco e accettare connessioni tra i giocatori.

Non puoi interrompere uno schieramento in corso. Se la distribuzione entra in uno stato errato o fallisce, puoi ricominciare da capo utilizzando l'opzione Reimposta distribuzione.

Avvia il client

A questo punto, hai completato tutte le attività necessarie per avviare e giocare alla tua partita multigiocatore ospitataAmazon GameLift Servers. Per giocare, scegli Start Client per avviare un'istanza locale del tuo client di gioco.

  • Se hai utilizzato lo scenario a flotta singola, apri un'istanza del client di gioco con un giocatore e accedi alla mappa del server per spostarti. Puoi aprire una seconda istanza del client di gioco per aggiungere un secondo giocatore alla stessa mappa di gioco del server.

  • Se hai implementato FlexMatch lo scenario, la soluzione di hosting attende che almeno due client di gioco effettuino richieste di matchmaking. Apri almeno due istanze del tuo client di gioco con un giocatore. I due giocatori verranno abbinati e invitati a partecipare a una sessione di gioco per la partita.

Aggiorna una flotta di container

Se hai implementato con successo una soluzione di hosting di container gestiti, puoi utilizzare la funzione di distribuzione Update. Questa opzione consente di aggiornare le impostazioni di configurazione per una flotta di container distribuita, senza dover creare una nuova flotta.

Quando si aggiorna una distribuzione, è possibile distribuire un'immagine del container con una configurazione diversa del server di gioco, modificare il repository Amazon ECR, scegliere uno scenario di distribuzione diverso e personalizzare le impostazioni di configurazione opzionali.

Quando sei pronto per implementare le modifiche, scegli Aggiorna. Il tempo richiesto per un aggiornamento della distribuzione è simile a quello di una distribuzione completa. Per informazioni dettagliate sulla distribuzione, scegli Visualizza nella AWS console di gestione.

Pulisci le risorse distribuite

Come best practice, ripulisci le AWS risorse per la tua soluzione di container gestiti non appena non ti servono più. Potresti continuare a sostenere costi per queste risorse se non le rimuovi.

Elimina le seguenti risorse:

  • Stack di risorse del contenitore gestito. Le risorse in questo stack dipendono dallo scenario di distribuzione selezionato. Per eliminare l'intero stack, usa la CloudFormation console. Gli stack generati dal Amazon GameLift Servers plugin utilizzano la seguente convenzione di denominazione:. GameLiftPluginForUnity-{GameName}-Containers Attendi il completamento del processo di eliminazione dello stack prima di avviare una nuova distribuzione di contenitori gestiti nel plug-in. Per ulteriori informazioni, consulta Eliminare uno stack dalla console. CloudFormation

  • Repository Amazon ECR. Se hai utilizzato il plug-in per creare un repository per l'immagine del tuo contenitore, potresti voler eliminare tutti i repository che non sono più necessari. Non è necessario eliminare un repository prima di reimpostare una distribuzione di contenitori gestiti. Se si aggiorna o si reimposta una distribuzione, il plug-in utilizzerà automaticamente lo stesso repository a meno che non venga indicato di utilizzarne un altro. Per ulteriori informazioni, consulta Eliminazione di un repository privato in Amazon ECR.