Comunicação entre Blueprints
1. Como facilitar a comunicação entre objetos Blueprint?
Construindo um meio para que objetos individuais separados interagirem uns com os outros.
Útil para fazer coisas como:
-
Transmitindo um evento para vários ouvintes;
-
Dizendo a um objeto específico para fazer algo;
-
Consultando outro objeto por:
-
Estado;
-
Valores de propriedade;
-
Valores variáveis;
-
Resultados.
-
1.1. Estrutura da comunicação entre Blueprints
A seguir apresentamos um diagrama de como os elementos podem se comunicar e trocar informações.
A comunicação envolverá o seguinte:
- Um projeto de envio, um remetente de informações (Emissor);
- Pelo menos um
Receiving Blueprint
para receber as informações (Receptor); - A comunicação exigirá uma referência em algum ponto. Em outras palavras, uma das partes, o remetente ou o receptor, deve tomar conhecimento da outra, isso ocorre porque, como afirmado acima, não existe um sistema de comunicação de amplo espectro.
- Toda a comunicação do Blueprint é unilateral.
- Blueprints podem enviar dados para frente e para trás, mas requer que ambos os Blueprints configurem seus próprios caminhos individuais de comunicação.
- As consultas são possíveis, mas são iniciadas pelo remetente (ainda unidirecional).
1.2. Preparando o ambiente de testes
Vamos criar um ator com os seguintes parâmetros para que funcione como controlador de objetos;
1. Crie um Blueprint Actor
com nome ControleLuz;
2. Adicione e configure um Static Mesh
;
3. Adicione e configure um Box Colision
;
4. Implemente a função LampadaVisible para desligar e ligar a iluminação os objetos Light Point
passados como parâmetro;
5. Adicione a variável Lampada do tipo Point Light
e configure Instance Editable
para true
;
6. Adicione dois objetos Light Point
na cena;
7. Em um dos objetos de iluminação adicione a tag
lampada;
8. Associe um objeto na cena com a propriedade Lampada do ControleLuz;
2. Comunicação utilizando Acesso direto
Nesta passo iremos acessar diretamente o objeto e suas propriedades, usando o evento OnBeginOverLap
para alterar o estado da lâmpada de ligado para desligado pois o mesmo é passado como parâmetro.
2.1. Chamando a função LampadaVisible
Criando um referência do objeto é possível acessar a função LampadaVisible.
Quando qualquer objeto colidir com o ControleLuz a lâmpada ira desligar ou ligar.
2.2. Vídeo Comunicação entre Blueprints
3. Utilizando CAST
CAST ou conversão é um operador especial que força um tipo de dados a ser convertido em outro.
Exemplo em C++:
AStaticMeshActor* StaticMesh = Cast<AStaticMeshActor>(SM);
O comando acima inicializa o objeto StaticMesh
do tipo AStaticMeshActor
.
Para este passo usaremos o evento OnEndOverlap
para ler todos os objetos que tem a tag
lampada da cena e carregar em um array de objetos. Para cada objeto será executado o comando CAST
informando o type
para ter acesso a todas a funcionalidades do objeto.
3.1. CAST do objeto PointLight
GetAllActorWithTag
- Retorna um array com todos os objetos da cena com a tag passada como parâmetro, no caso Lampada.
3.2. Vídeo Comunicação entre Blueprints - Usando Cast 03 Unreal Engine
4. Utilizando o objeto Blueprint Interface
Blueprint interface permite que vários tipos diferentes de objetos compartilhem e sejam acessados através de uma interface comum. Simplificando, as Blueprint interfaces permitem que diferentes Blueprints compartilhem e enviem dados entre si.
4.1. Menu Blueprint/Blueprint Interface
Podemos implementar um Blueprint interface
Utilizando o menu de contexto.
Crie o objeto com o nome BPI_Colecionaveis para que possamos continuar o exemplo.
4.2. Editor de Blueprint Interface
Clicando e abrindo o objeto criado anteriormente perceba que o objeto não tem lógica pois neste caso o objeto funciona como uma ponte para eventos em outros objetos que deverão ter sua própria lógica.
Em seguida adicione uma função chamada Nome para que possa servir como função ponte.
4.3. Implementando um objeto para utilizar a interface
1. Crie o ator BP_Cadeira do tipo Blueprint Actor
;
2. Adicione e configure um Static Mesh
com um malha de uma cadeira ou mesa;
3. Utilizando a opção Class Settings
adicione a interface BPI_Colecionaveis.
4. Uma vez a interface configurada as funções de BPI_Colecionaveis ficarão disponíveis através de eventos.
5. Adicione no Character
jogável BP_Hero e implemente a lógica abaixo.
RaioSegurar - Raio da esfera que é disparada;
DistanciaSegurar - Distância do raio disparado;
Nome - A função Nome da interface ficará disponível para ser chamada.
4.4. Utilizando parâmetros na Interface
Implemente a função ExecutaAcao com parâmetro Acao do tipo string
, usaremos esse parâmetro para determinar ações que o objeto pode executar;
Ao chamar a função é fornecido um valor.
Implemente a lógica de tratamento do parâmetro dentro do objeto cadeira ou mesa.
Podemos melhorar o controle utilizando uma variável enumeration
para parametrizar as ações.
4.5. Vídeo Comunicação entre Blueprints - Utilizando o objeto Blueprint Interface - 04 - Unreal Engine
5. Event Dispatcher
São eventos que transmitem mensagens para outros Blueprints, os receptores “ouvem” as mensagens e podem implementar a sua própria lógica de tratamento.
Vinculando um ou mais eventos a um Event Dispatcher
, você pode fazer com que todos esses eventos sejam disparados assim que o Event Dispatcher
for chamado.
Esses eventos podem ser vinculados a uma classe Blueprint, mas os Event Dispatchers
também permitem que eventos sejam disparados dentro do Level Blueprint
.
5.1. Exemplo utilizando o Character BP_Hero que será o emissor dos eventos
Adicionamos EventDispatcher
e no Event Graph
implementados a chamada do evento utilizando Call (Call nome do evento).
5.2. Lógica dos objetos que vão interagir com o personagem
No objeto BP-Cubo por exemplo adicionamos referência ao personagem BP_Hero usando cast
para ter acesso ao evento registrado no dispatcher
;
Implementamos Bind Event
do disptacher para associar um evento a chamada.