3 minuto(s) de leitura

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.

Figura: Tipos de conexão - Cliente Servidor.
Figura: Tipos de conexão - Cliente Servidor.

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.

Figura: Tipos de conexão - Ponto a Ponto.
Figura: Tipos de conexão - Ponto a Ponto.

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.

Figura:Multiplayer, Executando várias instâncias do jogo.
Figura: Multiplayer, Executando várias instâncias do jogo.

A seguir vamos implementar as estruturas de controle do game GameMode, GameInstance e PlayerController.

Figura: Multiplayer, Implementando estruturas de controle.
Figura: Multiplayer, Implementando estruturas de controle.

Criando o GameInstance.

Figura: Multiplayer, Implementando a GameInstance.
Figura: Multiplayer, Implementando a GameInstance.

Implementando o evento OpenMenu.

Figura: Multiplayer, Implementando a chamada do menu do jogo.
Figura: Multiplayer, Implementando a chamada do menu do jogo.

Configurando o projeto com GameInstance.

Figura: Multiplayer, Configurando a Gameinstance.
Figura: Multiplayer, Configurando a 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.

Figura: Criando level Menu
Figura: Criando level Menu

Implementando a lógica de chamada do menu no level Menu utilizando o Open Level Blueprints.

Figura: Multiplayer, Chamando o menu com BeginPlay.
Figura: Multiplayer, Chamando o menu com BeginPlay.

Implementando o Widget WBP_Menu.

Figura: Multiplayer, Implementando o Widget para o Menu.
Figura: Multiplayer, Implementando o Widget para o Menu.

Implementando os seguintes elementos do menu.

Figura: Multiplayer, Adicionando botões no menu.
Figura: Multiplayer, Adicionando botões no menu.

Implementar os eventos para instanciar uma conexão.

Figura: Multiplayer, Lógica Blueprint para criar uma conexão no servidor remoto.
Figura: Multiplayer, Lógica Blueprint para criar uma conexão no servidor remoto.

Conectar ao servidor utilizando IP.

Figura: Multiplayer, Lógica Blueprint para criar uma conexão no servidor remoto por IP.
Figura: Multiplayer, Lógica Blueprint para criar uma conexão no servidor remoto por IP.

3.1. Executando o jogo

Figura: Multiplayer, Play As Listen Server.
Figura: Configurando o jogo para aceitar duas conexões e executar em modo Servidor.

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.

Figura: Multiplayer, Dois PlayerStart.
Adicionando dois PlayerStart.

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”.

replication for moving actor

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.

Figura: Multiplayer,Static Mesh para o jogo.
Figura: Multiplayer,Static Mesh para o jogo.
Figura: Multiplayer, Component Replication.
Figura: O componente que associado também deverá ser replicado.

5.1. Implementando a manipulação do objeto pelo personagem

Figura: Multiplayer, Lógica Blueprint chamando a ação de segurar.
Figura: Eventos de entrada de dados (INPUT).
Figura: Multiplayer, Lógica Blueprint do evento AcaoDeSegurar.
Figura: Lógica para detectar o objeto na frente do jogador.
Figura: Multiplayer, Lógica Blueprint do evento AcaoDeSegurar continuação.
Figura: Multiplayer, Lógica Blueprint do evento AcaoDeSegurar continuação.
Figura: Multiplayer, Lógica Blueprint do evento para prender o objeto.
Figura: Agarrar objeto, este evento prende o objeto ao personagem.
Figura: Multiplayer, Lógica Blueprint do evento para alterar a posição do objeto preso ao personagem.
Figura: Evento *Segurando*, este evento utiliza o event tick para alterar a posição do objeto preso ao personagem.
Figura: Multiplayer, Lógica Blueprint do evento para soltar o objeto.
Figura: Multiplayer, Lógica Blueprint do evento para soltar o objeto.
Figura: Multiplayer, Lógica Blueprint da ação que arremessa o objeto.
Figura: Multiplayer, Lógica Blueprint da ação que arremessa o objeto.
Figura: Multiplayer, Lógica Blueprint simulando o arremesso.
Figura: Multiplayer, Lógica Blueprint simulando o arremesso.