Editado 1 dia atrás por ExtremeHow Equipe Editorial
UnityMultijogadorRedesDesenvolvimento de jogosOnlineLANScriptingC#ServidorClientePhotonMirrorJanelasMacLinux
Tradução atualizada 1 dia atrás
Unity é uma das plataformas mais populares para desenvolvimento de videogames, e configurar a funcionalidade multiplayer pode melhorar a experiência de jogo, permitindo que os jogadores interajam entre si. Neste guia detalhado, abordaremos como configurar multiplayer no Unity, cobrindo tudo o que você precisa saber do início ao fim. Este guia é destinado a desenvolvedores de Unity iniciantes e intermediários que são novos na configuração de jogos multiplayer.
Jogos multiplayer permitem que vários jogadores interajam e joguem no mesmo ambiente de jogo, seja no mesmo dispositivo ou conectados à Internet. Ao configurar multiplayer no Unity, precisamos entender os componentes básicos necessários, como rede, sincronização e comunicação entre jogadores.
Antes de começar, é importante escolher uma solução de rede que melhor se adeque ao seu projeto. Unity oferece várias opções para rede, cada uma com seus próprios méritos:
Para este guia, usaremos o netcode para GameObjects do Unity, pois ele fornece uma abordagem simples e se integra bem com os sistemas existentes do Unity.
Comece criando um novo projeto Unity. Abra o Unity Hub, clique no botão New Project, escolha um modelo que se adapte ao seu jogo (2D ou 3D) e dê um nome ao seu projeto.
Após criar seu projeto, você precisará instalar o pacote Netcode para GameObjects do Unity:
com.unity.netcode.gameobjects
na caixa de diálogo e clique em Add.Após instalar os pacotes de netcode, você começará a configurar a infraestrutura básica de rede. Comece criando um script para lidar com a lógica de rede.
NetworkManager
é necessário para gerenciar o estado e a lógica do seu jogo multiplayer. Crie um novo script chamado NetworkManager
:
// NetworkManager.cs
using Unity.Netcode;
using UnityEngine;
public class NetworkManagerScript : MonoBehaviour {
private void Start() {
Debug.Log("Network Manager Iniciado.");
}
public void StartHost() {
NetworkManager.Singleton.StartHost();
}
public void StartClient() {
NetworkManager.Singleton.StartClient();
}
public void StartServer() {
NetworkManager.Singleton.StartServer();
}
}
Este script fornece métodos para iniciar o jogo no modo host, servidor ou cliente. Anexe este script a um GameObject em sua cena, por exemplo, um controlador de jogo.
Em um jogo multiplayer, jogadores e objetos devem ser sincronizados em todos os clientes e hosts. Configure um prefab de jogador que será instanciado para cada jogador que entrar no jogo:
Prefab
arrastando seu objeto de jogador para a pasta Assets
.NetworkObject
ao prefab do jogador.NetworkManagerScript
.Network Prefabs
.Para a interação entre jogadores em um ambiente multiplayer, precisamos implementar o movimento e sincronizar esse movimento na rede. Crie um script para lidar com o movimento do jogador e anexe-o ao seu prefab de jogador:
// PlayerMovement.cs
using UnityEngine;
using Unity.Netcode;
public class PlayerMovement : NetworkBehaviour {
public float moveSpeed = 5f;
private void Update() {
if (IsOwner) {
float moveX = Input.GetAxis("Horizontal");
float moveZ = Input.GetAxis("Vertical");
Vector3 move = transform.right * moveX + transform.forward * moveZ;
transform.position += move * moveSpeed * Time.deltaTime;
}
}
}
Neste script, se o jogador possuir o objeto, ele pode movê-lo, garantindo que apenas o jogador correto possa controlar seu personagem.
Uma vez que os jogadores podem se mover, é importante que os movimentos e ações sejam sincronizados entre todos os participantes na rede. O netcode do Unity fornece capacidades através de NetworkTransforms e RPC (Chamada de Procedimento Remoto).
O componente NetworkTransform
permite sincronizar automaticamente alterações posicionais. Adicione este componente ao seu prefab de jogador:
As Remote Procedure Calls (RPC) são métodos chamados em um cliente ou servidor remoto. Elas são usadas para eventos que precisam ser executados imediatamente, como ações ou interações de jogadores.
// Exemplo de uma chamada RPC
[ServerRpc]
void PerformActionServerRpc() {
// Exemplo de ação possivelmente atualizando o estado de um item
Debug.Log("Servidor executando a ação.");
}
As RPCs do servidor são iniciadas pelo cliente e executadas no servidor, tornando-as ideais para validar ações ou propagar alterações para todos os jogadores.
Após a configuração básica de rede estar completa, teste a funcionalidade multiplayer. Unity fornece uma interface de usuário de Network Manager para ajudá-lo a testar facilmente seu jogo multiplayer.
Crie e execute várias instâncias do seu jogo para simular jogadores host e cliente:
Uma vez que a configuração básica multiplayer está funcionando corretamente, considere tópicos avançados como matchmaking, servidores dedicados e otimização de rede.
Matchmaking envolve emparelhar jogadores em jogos multiplayer. Considere usar o serviço de matchmaking do Unity ou serviços de terceiros como o Photon Cloud para este aspecto.
Usar um servidor dedicado oferece muitos benefícios, como melhor estabilidade e menor latência. Você pode implantar sua lógica de servidor separadamente dos clientes para escalabilidade.
Configurar multiplayer no Unity requer o entendimento dos conceitos básicos de rede, sincronização e gerenciamento eficiente das interações entre jogadores. Seguindo este guia, você aprendeu como configurar um projeto multiplayer básico com movimento de jogadores e componentes de teste. Ajuste sua configuração com base nas necessidades específicas do seu jogo e continue a explorar as extensas capacidades de rede do Unity para uma rica experiência multiplayer.
Se você encontrar algo errado com o conteúdo do artigo, você pode