Multiplayer.
Neste capítulo vamos implementar e organização elementos para conexão, replicação e inicialização de um jogo multiplayer.
1. Implementando um jogo multiplayer
1.1. Tipos de Conexão
A conexão somente é possível com versões do mesmo programa, isso significa que o cliente e o servidor devem estar sendo usados na mesma versão.
1.1.1. Cliente e Servidor
Considerando a topologia de redes, Cliente/Servidor, onde o programa cliente se conecta através de uma rede a um programa servidor, sendo que o programa servidor pode ficar somente no atendimento ou pode realizar tarefas.
1.1.2. Ponto a Ponto
Neste caso, o programa cliente se conecta com outro computador, não existe o papel de servidor e os computadores ficam operantes trocando informação.
1.2. Implementação no jogo
No Unreal Engine consideramos a estrutura de Cliente/Servidor e configurando os elementos:
Servidor (Host) - Jogo em modo escuta listen.
C:\Program Files\UE_4.17\Engine\Binaries\Win64\UE4Editor.exe
C:\PATH_TO_MY_PROJECT.uproject /Game/ThirdPersonCPP/Maps/ThirdPersonExampleMap -server -log -port=8003
Cliente - Jogo tem que conectar em um outro através de um endereço de rede.
C:\Program Files\UE_4.17\Engine\Binaries\Win64\UE4Editor.exe
C:\PATH_TO_MY_PROJECT.uproject 192.168.1.90:8003 -game -log
Por último é necessário configurar dentro do projeto a busca de servidores na rede local ou remota;
2. Executando e configurando o projeto
Para executar o jogo em modo multiplayer utilize o menu principal e acesse a opção Play
escolhendo as seguintes opções:
-
Number of Players
: Escolha a quantidade de conexões que o projeto recebera. -
Net Mode
: Play As Listem Server, O jogo está sendo executado como um servidor que hospeda uma sessão multijogador em rede. Aceita conexões de clientes remotos e possui players locais diretamente no servidor. Este modo é frequentemente usado para multiplayer competitivo e cooperativo casual.
A seguir vamos implementar as estruturas de controle do game GameMode
, GameInstance
e PlayerController
.
Criando o GameInstance
.
Implementando o evento OpenMenu.
Configurando o projeto com GameInstance.
3. Implementando o menu
Para exemplificar a conexão de rede do projeto, vamos implementar menus para possibilitar a inserção do endereço de rede do servidor, modo do jogo (Cliente ou Servidor) e localizar o jogo na rede.
Implementando a lógica de chamada do menu no level Menu utilizando o Open Level Blueprints
.
Implementando o Widget
WBP_Menu.
Implementando os seguintes elementos do menu.
Implementar os eventos para instanciar uma conexão.
Conectar ao servidor utilizando IP.
3.1. Executando o jogo
Play Offline
- Executa o jogo em modo offline;
Play As Listen server
- Executa o jogo (tela principal) em modo servidor;
Play As Client
- Executa o jogo (tela principal) em modo Cliente, iniciando a servidor em outra janela.
4. Replicação
4.1. Replicação de eventos
Para utilizar a replicação de eventos é necessário criar eventos customizados Add custom event
.
Servidor - Executado apenas no servidor que hospeda o jogo;
Cliente - Executado apenas no cliente que possui o ator ao qual a função pertence. Caso o Ator não possua conexão própria, esta lógica não será executada;
NetMulticast - Executado em todos os clientes que estão conectados ao servidor, bem como no próprio servidor.
4.2. Objetos não Replicados
-
HUD
-
UMG Widgets
Replicar Movimento” funciona apenas para um componente raiz. Para este recurso, StaticMeshComponent
deve ser escolhido como “root”.
4.3. Replicação de variáveis
Usaremos as variáveis Vida, Nome e VidaMax para exemplificar.
-
Vida
-
Nome
-
VidaMax
5. Implementando o objeto de para ser arremessado
Implementando um Blueprints Static Mesh Actor e configurando a replicação do objeto.