Integre o Amazon GameLift em um projeto do Unity - Amazon GameLift

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Integre o Amazon GameLift em um projeto do Unity

Este tópico explica como configurar o plug-in do Server SDK para C# do Amazon GameLift para Unity e integrá-lo aos seus projetos de jogos.

Recursos adicionais:

Pré-requisitos

Para usar o plug-in do SDK do servidor C# do Amazon GameLift para Unity, você precisa dos seguintes componentes:

  • Um ambiente de desenvolvimento e uma versão do Unity Editor que o plug-in suporta (consulte Suporte ao desenvolvimento com a Amazon GameLift). Para obter informações sobre as versões do Unity, consulte Requisitos do sistema para Unity na documentação do Unity.

  • O plug-in SDK do servidor do Amazon GameLift para o pacote do Unity. Esse pacote inclui o SDK 5+ do servidor para C#. Você poderá baixar o pacote neste site: Conceitos básicos do Amazon GameLift.

  • O registro com escopo de terceiros do UnityNuGet. Essa ferramenta gerencia DLLs de terceiros. Para obter mais informações, consulte o repositório UnityNuGet no Github.

Configurar o UnityNuGet

Se você não tiver o UnityNuGet configurado para seu projeto de jogo, use as etapas a seguir para instalar a ferramenta usando o gerenciador de pacotes do Unity. Como alternativa, você pode usar a NuGet CLI para baixar manualmente as DLLs. Para obter mais informações, consulte do SDK do servidor C# do Amazon GameLift para Unity README.

Para integrar o UnityNuGet ao projeto de jogo do Unity.
  1. Com seu projeto aberto no Unity Editor, acesse o menu principal e selecione Editar, Configurações do projeto. Nas opções, escolha a seção Gerenciador de pacotes e abra o grupo Registros com Escopo.

  2. Escolha o botão + e insira os seguintes valores para o registro com escopo do UnityNuGet:

    Name: Unity NuGet URL: https://unitynuget-registry.azurewebsites.net Scope(s): org.nuget
  3. Para usuários da versão 2021 do Unity:

    Depois de configurar o UnityNuGet, verifique se há erros Assembly Version Validation exibidos no console do Unity. Esses erros ocorrem se os redirecionamentos de vinculação para assemblies com nomes fortes nos pacotes do NuGet não estiverem sendo resolvidos corretamente para caminhos dentro do seu projeto do Unity. Para resolver esse problema, configure a validação da versão de montagem do Unity:

    1. No Unity Editor, vá para o menu principal e selecione Editar, Configurações do projeto e abra a seção Jogador.

    2. Desmarque a opção Validação da versão de montagem.

Instalar o plug-in

Use o procedimento a seguir para instalar o plug-in do SDK do servidor C# do Amazon GameLift para Unity e configurar o registro do log4net.

Para instalar o plugin
  1. Com seu projeto aberto no Unity Editor, vá até o menu principal e selecione Window, Gerenciador de pacotes.

  2. Escolha o botão + para adicionar um novo pacote. Escolha a opção Adicionar pacote do tarball.

  3. Em Selecionar pacotes no disco, localize o plug-in do Server SDK para C# do Amazon GameLift para baixar arquivos do Unity e escolha o arquivo .tgz do Server SDK do Amazon GameLift. Escolha Abrir para instalar o plug-in.

O SDK do servidor do Amazon GameLift usa a estrutura log4net para gerar mensagens de log. Ele é configurado para enviar mensagens para o terminal de um servidor criado por padrão, mas o Unity exige configuração para adicionar suporte ao registro de arquivos. Você poderá adicionar esse suporte ao seu projeto importando a amostra fornecida dentro do pacote do Server SDK do Amazon GameLift. Use o procedimento a seguir para adicionar a amostra e configurar o log4net:

Para configurar o log4net para saída de arquivo
  1. Com seu projeto aberto no Unity Editor, vá até o menu principal e selecione Window, Gerenciador de pacotes.

  2. No menu suspenso, selecione Pacotes: No projeto e, em seguida, selecione Server SDK do Amazon GameLift na lista de pacotes. Isso abre os detalhes do pacote.

  3. Nos detalhes do pacote, selecione a opção Grupo de amostras e pressione Importar.

  4. O arquivo log4net.config e o script LoggingConfiguration.cs que o acompanha executam automaticamente a configuração, que agora está configurada na pasta do projeto Assets/Samples.

    nota

    Se precisar mover seu arquivo log4net.config para uma pasta diferente no projeto, você também deverá atualizar o caminho do arquivo de configuração no script LoggingConfiguration.cs com o novo caminho. Para obter mais informações, consulte o manual do log4net sobre como configurar o log4net.

Para obter instruções mais detalhadas e orientações de teste, consulte o link README localizado no download do plug-in.

Configure uma frota Anywhere do Amazon GameLift para testes

Você poderá configurar sua estação de trabalho de desenvolvimento como uma frota de hospedagem do Anywhere do Amazon GameLift para testar iterativamente sua integração com o Amazon GameLift. Com essa configuração, você pode iniciar os processos do servidor de jogos em sua estação de trabalho, enviar solicitações de junção de jogadores ou de marcação de jogos ao Amazon GameLift para iniciar sessões de jogo e conectar clientes às novas sessões de jogo. Com sua própria estação de trabalho configurada como servidor de hospedagem, você pode monitorar todos os aspectos da integração do seu jogo com o Amazon GameLift.

Para obter instruções sobre como configurar sua estação de trabalho, consulte Configure testes locais com a Amazon GameLift Anywhere para concluir as seguintes etapas:

  1. Crie um local personalizado para sua estação de trabalho.

  2. Crie uma frota Anywhere do Amazon GameLift com sua nova localização personalizada. Se for bem-sucedida, essa solicitação retornará uma ID da frota. Anote esse valor, pois você precisará disso mais tarde.

  3. Registre sua estação de trabalho como uma computação na nova frota Anywhere. Forneça um nome de computação exclusivo e especifique o endereço IP da sua estação de trabalho. Se for bem-sucedida, essa solicitação retornará um endpoint do SDK de serviço, na forma de uma URL do WebSocket. Anote esse valor, pois você precisará disso mais tarde.

  4. Gere um token de autenticação para a computação da sua estação de trabalho. Essa autenticação de curta duração inclui o token e uma data de expiração. Seu servidor de jogo o usa para autenticar a comunicação com o serviço do Amazon GameLift. Armazene a autenticação no computador da sua estação de trabalho para que os processos do servidor de jogos em execução possam acessá-la.

Adicione o código do servidor do Amazon GameLift ao seu projeto do Unity

Seu servidor de jogo se comunica com o serviço do Amazon GameLift para receber instruções e relatar o status contínuo. Para fazer isso, você adiciona um código de servidor de jogos que usa o SDK do servidor do Amazon GameLift.

O exemplo de código fornecido ilustra os elementos básicos de integração necessários. Ele usa um MonoBehavior para ilustrar uma inicialização simples do servidor de jogos com o Amazon GameLift. O exemplo pressupõe que o servidor do jogo seja executado em uma frota Anywhere do Amazon GameLift para testes. Inclui código para:

  • Inicialize um cliente da API Amazon GameLift. A amostra usa a versão de InitSDK() com parâmetros do servidor para sua frota Anywhere e computação. Use o URL do WebSocket, o ID da frota, o nome do computador (ID do host) e o token de autenticação, conforme definido no tópico anterior Configure uma frota Anywhere do Amazon GameLift para testes.

  • Implemente funções de retorno de chamada para responder às solicitações do serviço do Amazon GameLift, inclusive OnStartGameSession, OnProcessTerminate e onHealthCheck.

  • Chame processReady () com uma porta designada para notificar o serviço do Amazon GameLift quando o processo estiver pronto para hospedar sessões de jogo.

O código apresentado neste tópico estabelece comunicação com o serviço do Amazon GameLift e . Ele também implementa um conjunto de funções de retorno de chamada que respondem às solicitações do . Para obter mais informações sobre cada função e o que o código faz, consulte Inicializar o processo do servidor. Para obter mais informações sobre as ações do SDK e os tipos de dados usados nesse código, leia Referência do SDK do servidor do Amazon GameLift para C#.

Este exemplo mostra como adicionar todos os elementos necessários, conforme descrito em Adicionar o Amazon GameLift ao seu servidor de jogos. Inclui:

Para obter mais informações sobre como adicionar a funcionalidade do Amazon GameLift, consulte estes tópicos:

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); } } }

Recursos adicionais

Use os seguintes recursos para testar seu servidor de jogos e expandir a funcionalidade: