Adicionar o FlexMatch a um cliente do jogo - 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á.

Adicionar o FlexMatch a um cliente do jogo

Este tópico descreve como adicionar o suporte à criação de jogos do FlexMatch aos serviços de jogos no lado do cliente. O processo é essencialmente o mesmo se você estiver usando o FlexMatch com a hospedagem gerenciada Amazon GameLift ou com outra solução de hospedagem. Para saber mais sobre o FlexMatch e como configurar um marcador personalizado para os jogos, consulte os seguintes tópicos:

Para habilitar a criação de jogos do FlexMatch no jogo, adicione a seguinte funcionalidade:

  • Solicitar a criação de jogos para um ou mais jogadores (obrigatório).

  • Acompanhe o status das solicitações de criação de jogos (obrigatório).

  • Solicitar aceitação do jogador para um jogo proposto (opcional).

  • Depois que uma sessão de jogo é criada para a nova correspondência, obtenha as informações sobre a conexão do jogador e ingresse no jogo.

Preparar para solicitar a criação de jogos para jogadores

É altamente recomendável que o cliente do jogo faça solicitações de marcação por meio de um serviço de jogo no lado do cliente. Ao usar uma fonte confiável, você pode proteger mais facilmente contra tentativas de invasão e dados de jogadores falsos. Se o seu jogo tem um serviço de diretório de sessão, esta é uma boa opção para lidar com as solicitações de criação de jogos.

Para preparar seu serviço de cliente, execute as seguintes tarefas:

  • Adicione a API do Amazon GameLift. Seu cliente usa a funcionalidade de serviço na API do Amazon GameLift, que faz parte do SDK da AWS. Consulte SDKs do Amazon GameLift SDKs para serviços do cliente para saber mais sobre o SDK da AWS e baixar a versão mais recente. Adicione esse SDK ao seu projeto de serviço de cliente do jogo.

  • Configure um sistema de tickets de criação de jogos. Todas as solicitações de criação de jogos ter um ID de ticket exclusivo. É necessário um mecanismo para gerar IDs exclusivos e atribui-los às novas solicitações de correspondência. Um ID de ticket pode usar qualquer formato de string com até 128 caracteres.

  • Obter informações sobre o matchmaker. Obtenha o nome da configuração de criação de jogos que você planeja usar. Também é necessária a lista dos atributos de jogador exigidos do matchmaker, que estão definidos no conjunto de regras do matchmaker.

  • Obter dados do jogador. Configure uma maneira de obter dados relevantes para cada jogador. Isso inclui o ID do jogador, os valores de atributo do jogador e os dados de latência atualizados para cada região em que o jogador provavelmente será colocado em um jogo.

  • (opcional) Habilite a alocação de marcação. Decida como você quer preencher seus jogos correspondentes. Se seus marcadores de jogos estiverem com o modo de alocação definido como "manual", é recomendável adicionar o suporte de alocação ao seu jogo. Se seus marcadores de jogos estiverem com o modo de alocação definido como "automático", é recomendável desativar essa função nas sessões de jogos individuais. Saiba mais sobre o gerenciamento de correspondência de alocação em Preencher jogos existentes com o FlexMatch.

Solicitar criação de jogos para jogadores

Adicione o código ao seu serviço de cliente para criar e gerenciar as solicitações de criação de jogos para um matchmaker do FlexMatch. O processo de solicitação de criação de jogos do FlexMatch é idêntico para jogos que usam o FlexMatch com hospedagem gerenciada pelo Amazon GameLift e para jogos que usam o FlexMatch como uma solução independente.

Criar uma solicitação de criação de jogos:
  • Chame o StartMatchmaking da API do Amazon GameLift. Cada solicitação deve conter as seguintes informações.

    matchmaker

    O nome da configuração de criação de jogos a ser usada para a solicitação. O FlexMatch insere cada solicitação no grupo do matchmaker especificado, e a solicitação é processada de acordo com a forma como o marcador está configurado. Isso inclui aplicar um limite de tempo, para solicitar a aceitação de correspondências de jogadores, que a fila usará ao criar uma sessão de jogo resultante, etc. Saiba mais sobre os marcadores de jogos e os conjuntos de regras em Crie um FlexMatch matchmaker.

    ID do ticket

    Um ID de ticket exclusivo atribuído à solicitação. Tudo relacionado à solicitação, incluindo eventos e notificações, fará referência ao ID do ticket.

    Dados do jogador

    Lista de jogadores para os quais você quer criar uma correspondência. Se algum dos jogadores na solicitação não atender aos requisitos de correspondência, com base nas regras de correspondência e nos mínimos de latência, a solicitação de criação de jogos nunca resultará em uma correspondência bem-sucedida. Você pode incluir até dez jogadores em uma solicitação de correspondência. Quando há vários jogadores em uma solicitação, o FlexMatch tenta criar uma única correspondência e atribuir todos os jogadores à mesma equipe (selecionada aleatoriamente). Se uma solicitação contiver muitos jogadores para caber em uma das equipes de correspondência, a solicitação não será correspondida. Por exemplo, se você tiver configurado o matchmaker para criar correspondências 2v2 (duas equipes de dois jogadores), você não poderá enviar uma solicitação de criação de jogos contendo mais de dois jogadores.

    nota

    Um jogador (identificado pelo ID) só pode ser incluído em uma solicitação de criação de jogos por vez. Ao criar uma nova solicitação para um jogador, todos os tickets de criação de jogos ativos com o mesmo ID de jogador são automaticamente cancelados.

    Para cada jogador listado, inclua os seguintes dados:

    • Player ID (ID do jogador) Cada jogador deve ter um ID de jogador exclusivo, gerado por você. Consulte Gerar IDs de jogador.

    • Atributos do jogador: se o matchmaker usado chamar atributos do jogador, a solicitação deverá fornecer esses atributos para cada jogador. Os atributos necessários são definidos no conjunto de regras do matchmaker, que também especifica o tipo de dados do atributo. Um atributo é opcional somente quando o conjunto de regras especifica um valor padrão para ele. Se a solicitação de correspondência não fornecer os atributos necessários para todos os jogadores, a solicitação de marcação não será bem-sucedida. Saiba mais sobre conjuntos de regras do marcador e os atributos de jogador em Criar um conjunto de regras do FlexMatch e FlexMatch exemplos de conjuntos de regras.

    • Latências do jogador: se o matchmaker em uso tiver uma regra de latência de jogador, a solicitação deverá relatar a latência para cada jogador. Os dados de latência são uma lista de um ou mais valores para cada jogador. Eles representam a latência enfrentada pelo jogador nas regiões da fila do matchmaker. Se nenhum valor de latência for incluídos na solicitação, o jogador não poderá ser correspondido, e a solicitação falhará.

Recuperar os detalhes da solicitação de correspondência:
  • Assim que uma solicitação de correspondência for enviada, você poderá visualizar os detalhes da solicitação, chamando Describecriação de jogos com o ID do ticket da solicitação. Essa chamada retorna as informações da solicitação, incluindo o status atual. Quando uma solicitação tiver sido concluída com êxito, o ticket também conterá as informações necessárias para que um cliente de jogos se conecte à correspondência.

Cancelar uma solicitação de correspondência:
  • Você pode cancelar uma solicitação de criação de jogos a qualquer momento chamando Stopcriação de jogos com o ID do ticket da solicitação.

Rastrear eventos de criação de jogos

Configure notificações para rastrear os eventos que o Amazon GameLift emite para processos de criação de jogos. É possível configurar as notificações diretamente, criando um tópico do SNS ou usando o Amazon EventBridge. Para obter mais informações sobre a configuração de notificações, consulte Configurar notificação de eventos do FlexMatch. Quando você tiver configurado as notificações, adicione um ouvinte em seu serviço de cliente para detectar os eventos e responder, conforme necessário.

Também é uma boa ideia fazer backup das notificações sondando periodicamente as atualizações de status quando passar um período significativo sem notificação. Para minimizar o impacto no desempenho de criação de jogos, certifique-se de fazer uma sondagem somente depois de aguardar pelo menos 30 segundos após o envio do ticket de criação de jogos ou após a última notificação recebida.

Recupere um ticket de solicitação de criação de jogos, incluindo o status atual, chamando DescribeMatchmaking com o ID da solicitação. Recomendamos a sondagem não mais de uma vez a cada 10 segundos. Essa abordagem é para uso somente durante cenários de desenvolvimento de baixo volume.

nota

Você deve configurar seu jogo com notificações de eventos antes do uso da criação de jogos de alto volume, como teste de carga de pré-produção. Todos os jogos em versão pública devem usar notificações independentemente do volume. A abordagem de sondagem contínua é apropriada apenas para jogos em desenvolvimento com baixo uso de criação de jogos.

Solicitar aceitação do jogador

Se você estiver usando um matchmaker com a aceitação do jogador ativada, adicione o código ao seu serviço de cliente para gerenciar o processo de aceitação do jogador. O processo de solicitação de criação de jogos do FlexMatch é idêntico para jogos que usam o FlexMatch com hospedagem gerenciada pelo Amazon GameLift e para jogos que usam o FlexMatch como uma solução independente.

Solicitar aceitação do jogador para uma correspondência proposta:
  1. Detectar quando uma correspondência proposta precisa a aceitação do jogador. Monitore o ticket de marcação para detectar quando o status mudar para REQUIRES_ACCEPTANCE. Uma alteração nesse status aciona o evento MatchmakingRequiresAcceptance do FlexMatch.

  2. Obtenha aceitações de todos os jogadores. Crie um mecanismo para apresentar os detalhes da correspondência proposta para cada jogador no ticket da criação de jogos. Os jogadores devem ser capazes de indicar que aceitam ou rejeitam a correspondência proposta. Você pode recuperar os detalhes da correspondência, chamando DescribeMatchmaking. Os jogadores têm um tempo limitado para responder antes que o matchmaker revogue a correspondência proposta e continue em frente.

  3. Relate respostas do jogador para o FlexMatch. Relate as respostas dos jogadores, chamando AcceptMatch com a aceitação ou rejeição. Todos os jogadores em uma solicitação de criação de jogos devem aceitar a correspondência para ela e continuar.

  4. Gerencie os tickets com aceitações falhas. Uma solicitação falha quando qualquer jogador na correspondência proposta rejeita a correspondência ou não responde até o limite de tempo. Os tickets para jogadores que aceitaram a partida são automaticamente devolvidos ao pool de tickets. Os tickets para jogadores que não aceitaram a partida passam para o status de FALHA e não são mais processados. Para tickets com vários jogadores, se algum jogador do ticket não aceitar a partida, o ticket inteiro falhará.

Conectar-se a um jogo

Adicione código ao serviço de jogo para processar um jogo formado com êxito (status COMPLETED ou evento MatchmakingSucceeded) conforme necessário. Isso inclui notificar os jogadores correspondentes e enviar informações de conexão aos seus clientes de jogos.

Para jogos que usam hospedagem gerenciada do Amazon GameLift, quando uma solicitação de criação de jogos é atendida com sucesso, as informações de conexão da sessão do jogo são adicionadas ao ticket de criação de jogos. Recupere um ticket de criação de jogos concluído chamando DescribeMatchmaking. As informações de conexão incluem o endereço IP e a porta do jogo, bem como um ID de sessão do jogador para cada um. Saiba mais em GameSessionConnectionInfo. Seu cliente de jogo pode usar essas informações para se conectar diretamente à sessão de jogo para o jogo. A solicitação de conexão precisa incluir um ID de sessão de jogador e um ID de jogador. Esses dados associam o jogador conectado à sessão do jogo, que inclui os dados de correspondência da atribuições de equipe (consulte GameSession).

Para jogos que usam outras soluções de hospedagem, incluindo o Amazon GameLift FleetIQ, você deve criar um mecanismo para permitir que os jogadores da partida se conectem à sessão de jogo apropriada.

Solicitações criação de jogos de exemplo

Os seguintes trechos de código criam as solicitações de criação de jogos para vários marcadores de jogos. Conforme descrito, uma solicitação deve fornecer os atributos de jogador que são necessárias pelo matchmaker em uso, conforme definido no conjunto de regras do marcador. O atributo fornecido deve usar o mesmo tipo de dados, número (N) ou string (S) definido no conjunto de regras.

# Uses matchmaker for two-team game mode based on player skill level def start_matchmaking_for_cowboys_vs_aliens(config_name, ticket_id, player_id, skill, team): response = gamelift.start_matchmaking( ConfigurationName=config_name, Players=[{ "PlayerAttributes": { "skill": {"N": skill} }, "PlayerId": player_id, "Team": team }], TicketId=ticket_id) # Uses matchmaker for monster hunter game mode based on player skill level def start_matchmaking_for_players_vs_monster(config_name, ticket_id, player_id, skill, is_monster): response = gamelift.start_matchmaking( ConfigurationName=config_name, Players=[{ "PlayerAttributes": { "skill": {"N": skill}, "desiredSkillOfMonster": {"N": skill}, "wantsToBeMonster": {"N": int(is_monster)} }, "PlayerId": player_id }], TicketId=ticket_id) # Uses matchmaker for brawler game mode with latency def start_matchmaking_for_three_team_brawler(config_name, ticket_id, player_id, skill, role): response = gamelift.start_matchmaking( ConfigurationName=config_name, Players=[{ "PlayerAttributes": { "skill": {"N": skill}, "character": {"S": [role]}, }, "PlayerId": player_id, "LatencyInMs": { "us-west-2": 20} }], TicketId=ticket_id) # Uses matchmaker for multiple game modes and maps based on player experience def start_matchmaking_for_multi_map(config_name, ticket_id, player_id, skill, maps, modes): response = gamelift.start_matchmaking( ConfigurationName=config_name, Players=[{ "PlayerAttributes": { "experience": {"N": skill}, "gameMode": {"SL": modes}, "mapPreference": {"SL": maps} }, "PlayerId": player_id }], TicketId=ticket_id)