O que você está procurando?
Games

Como escolher o código de rede correto para seu jogo

BRANDI HOUSE / UNITY TECHNOLOGIESContributor
Sep 8, 2020|6 Mínimo
Como escolher o código de rede correto para seu jogo

Quase todos os jogos multijogador precisam levar em conta e resolver desafios inerentes à rede que afetam a experiência do jogo, como latência, perda de pacotes e gerenciamento de cenas. Os jogos resolvem esses desafios de várias maneiras.

Encontrar a solução certa depende do gênero do jogo, da escala dos jogadores e dos objetos em rede, da competitividade e de outros aspectos, como o nível de controle necessário sobre a camada de rede. Cenários diferentes exigem soluções de netcode diferentes.

Neste blog, abordamos as bibliotecas de rede comuns usadas no Unity Engine, além dos resultados de um estudo realizado sobre a experiência dos desenvolvedores com essas soluções, para ajudá-lo a determinar o que pode ser adequado para o seu projeto.

O que é netcode?

Netcode é um termo de alto nível que muitos engenheiros usam para se referir a estruturas projetadas especificamente para ajudar a facilitar a criação de determinados aspectos da jogabilidade em rede, como sincronização de dados ou compensação de atraso.

Uma estrutura totalmente em rede contém dois componentes essenciais:

1. Uma camada de transporte (base) que gerencia todo o tráfego e os pacotes enviados de/para um cliente, host ou servidor

2. Uma camada de abstração de nível superior que simplifica as necessidades comuns de jogabilidade de rede e se integra às ferramentas

Muitas vezes, uma "solução de código de rede" refere-se a essa segunda camada de abstração, pois é nela que você implementa a jogabilidade em rede e as otimizações.

Diferentes soluções de código de rede têm diferentes limitações e recursos que podem facilitar ou dificultar a criação de sua experiência multijogador. É importante saber exatamente o que você deseja criar e avaliar suas opções antes de começar, para ajudar a reduzir as refatorações que podem ser caras.

Soluções de código de rede do Unity

O Unity tem duas soluções de código de rede originais diferentes: Netcode para GameObjects e Netcode para Entidades.

Netcode for GameObjects

O pacote Netcode for GameObjects foi criado para ajudá-lo a sincronizar mais facilmente cenas e dados de GameObjects em vários clientes e plataformas com modelos autorizados pelo cliente ou pelo servidor. A engine Unity ajuda a otimizar seus jogos multijogador com ferramentas para traçar o perfil da rede no modo Play e no tempo de execução.

Você também pode usar o Relay do Unity Gaming Services, que é um serviço complementar ponto a ponto econômico, para escalar testes de jogo e criar um jogo multijogador sem precisar investir em hospedagem dedicada.

NetCode para Entities

Expanda a gama de possibilidades no próximo Unity 2022 LTS. Adicione a capacidade de direcionar jogos multijogador de ação competitiva com o pacote Netcode for Entities baseado no ECS, desenvolvido para desempenho e escalabilidade. Você pode ter como alvo uma ambiciosa jogabilidade com autoridade de servidor, com previsão, interpolação e compensação de atraso.

Gerencie os custos com um destino de criação de servidor dedicado que pode remover assets automaticamente. Implante-o com a Hospedagem de Jogos no Servidor do Unity Gaming Services, uma abordagem simplificada para manter a resiliência e escalabilidade da infraestrutura dos seus jogos. Desta forma, você pode se concentrar em fornecer a melhor experiência a seus jogadores.

Como avaliar diferentes soluções de código de rede

A Unity coletou feedback sobre algumas das soluções de código de rede de terceiros mais amplamente usadas e criamos uma árvore de decisão para ajudar a orientá-lo no processo de decidir qual estrutura pode funcionar melhor para você.

Para criar essas ferramentas, coletamos e analisamos dados de três fontes:

  • Uma pesquisa com mais de 200 usuários do Unity que solicitou informações sobre suas experiências com estruturas de netcode específicas
  • Mais de 20 entrevistas aprofundadas com usuários que estão ativamente enviando jogos multijogador com Unity
  • Aprendizados dos protótipos que criamos com MLAPI (agora conhecido como Netcode for GameObjects), DarkRift 2, Mirror e Photon Quantum.

Os clientes pontuaram e classificaram as principais soluções de netcode em diferentes eixos com base em sua experiência.

1. Estabilidade e suporte

A rede é complexa, portanto, o nível de estabilidade e suporte que você recebe por meio de sua solução de código de rede é fundamental. A estabilidade e o suporte de cada solução de código de rede foram avaliados em três eixos: a probabilidade de bugs ou falhas, o tempo de resposta para corrigir problemas ou ajudar a depurar um desafio e a probabilidade de alterações significativas nas APIs.

2. Facilidade de uso

Compilamos as avaliações dos usuários sobre a facilidade de começar e realizar tarefas comuns, incluindo o fornecimento de boas amostras, documentação, tutoriais e a oferta de APIs simples para prototipagem da solução.

3. Desempenho

Quem quer uma solução que tenha um desempenho ruim? Para obter essa pontuação para cada solução de código de rede avaliada, procuramos GC/alocações limitadas, sobrecarga mínima de latência, computação de alto desempenho e, idealmente, a capacidade de multithread.

4. Escalabilidade

Dependendo do gênero de jogo que você deseja criar, a escalabilidade da solução de código de rede é uma consideração importante. Da mesma forma que o desempenho, avaliamos a capacidade da solução de suportar um número maior de clientes conectados sem sacrificar muito o desempenho.

5. Amplitude dos recursos

Ter uma solução de código de rede com todos os recursos é importante para dar suporte a qualquer gênero ou necessidades específicas de jogos que seu projeto tenha. Para classificar as soluções, nos concentramos em recursos de nível médio, como replicação de objetos e variáveis, RPCs, gerenciamento de cenas e assim por diante. Também procuramos recursos de nível superior, como previsão e compensação de defasagem.

6. Custo

Para fazer um orçamento adequado para sua solução de código de rede, incluímos também avaliações do custo de cada solução. Essa consideração leva em conta tanto o custo das bibliotecas/soluções quanto possíveis custos ocultos, como despesas gerais operacionais que precisam ser gerenciadas separadamente.

Qual é a melhor solução de código de rede para você?

Antes de tomar uma decisão sobre uma solução de código de rede, é importante levar em consideração alguns aspectos.

Em primeiro lugar, é altamente recomendável que você faça sua própria avaliação. Nosso resumo das opções mais comuns pode ser útil, mas você também deve fazer uma avaliação com base nas especificidades do seu jogo.

Em segundo lugar, essa lista se baseia em uma avaliação realizada em 2020 e não representa todas as alternativas de soluções de código de rede ou de camada de transporte disponíveis no momento.

Por fim, considere a quantidade de trabalho e manutenção adicionais relacionados à rede que você está preparado para assumir. Seu jogo precisa de tanta sobrecarga de rede?

Se estiver criando algo casual ou cooperativo que não exija a sincronização perfeita de todos os estados dos jogadores em todos os dispositivos, considere uma solução de código de rede com menos sobrecarga e custo de desenvolvimento, como o Netcode for GameObjects.

Se estiver criando um jogo mais rápido e voltado para a ação, em que as habilidades físicas dos jogadores são colocadas em competição entre si, considere uma solução como o Netcode for Entities. Isso pode oferecer suporte a coisas como previsão do cliente e tem um método para compensar o atraso.

Avaliação da solução de código de rede de 2020

As informações abaixo são um começo, mas recomendamos que você também faça o download do relatório completo de código de rede, no qual abordamos mais detalhes sobre essas soluções de código de rede de terceiros:

Observação: O PDF abrange as soluções mais citadas pelos clientes, mas existem outras. Alguns clientes discutiram outras soluções para as quais ainda não reunimos evidências suficientes para avaliar, como Forge, Normcore, Bolt, LL (Enet, LiteNet, etc.). Recomendamos que você os inclua em suas considerações para ver se eles seriam uma opção para sua configuração.

Imagem
Introdução ao desenvolvimento multijogador no Unity

Independentemente de você estar criando o próximo sucesso de Battle Royale ou um aconchegante jogo cooperativo on-line, é essencial compreender os fundamentos da rede multijogador e as soluções de código de rede disponíveis.

Consulte a amostra cooperativaBoss Room do Unity para ver um exemplo de qualidade de produção de um projeto feito com o Netcode for GameObjects. Se estiver procurando um exemplo de um jogo multijogador competitivo e de ritmo acelerado que também tenha desempenho de rede, confira a amostra ECS Network Racing do Unity criada com o Entities Component System. Para ver um exemplo de jogo que utiliza totalmente tudo o que a hospedagem de servidor de jogos tem a oferecer, confira a amostra do Battle Royale criada com o Photon Fusion.

Feliz criação.

Nota do editor: Este blog foi atualizado em março de 2023 com as informações mais recentes sobre as soluções de código de rede do Unity, a fim de fornecer mais informações úteis para os desenvolvedores que escolhem a solução de código de rede certa para seu jogo. Os dados do relatório ainda são de 2020.