Um problema que demorei muito pra resolver na Unreal é chamar o BeginPlay de alguma classe pai, poderia resumir a solução em uma linha mas vou me aprofundar um pouco no assunto sobre o uso de ‘classes pai'(Parent class) usando blueprints.

Pra quem é leigo no assunto e está no blog apenas acompanhando, Blueprint é um sistema de programação visual, que consiste em você usar blocos e ligar o que acontece em seguida em outros blocos, é como programar só que com uma interface visual. Sou programador em C++ também, mas confesso que Blueprint foi amor a primeira vista. A lógica em programar é a mesma, mas é muito legal como você organiza o código, debuga, vê ele em execução, eu gostei muito, o mesmo serve para shaders/animações.

Blueprint foi um dos principais motivos pra eu aprender a Engine e migrar meu projeto da unity (o segundo foi o poder!!). Hoje uso a unity só para dar suporte a um plugin.

Comparativo entre C++ e Blueprint:

Uma simples função de soma e printar o resultado na tela dentro da Unreal Engine usando C++
Função Somar feito em Blueprint. Fácil demais de entender.
Na esquerda a função criada Se clicar lá vai para a tela de cima desse print onde é trabalhada apenas a função, ja no print acima chamamos a função no Begin Play e imprimimos o resultado na tela.

Usar classes pai em Blueprints é quase que o mesmo que programar orientado a objeto. (aquele exemplo clichê de sempre): Você tem uma classe carro contendo campos: marca, cor, etc.. com diferentes funcionalidades, dai você tem a classe ‘carro do jogador’, que vai herdar a classe carro  e todas as funcionalidades dela só que a ‘carro do jogador’ vai ter funcionalidades únicas. Podendo não só sobrepor as chamadas da classe pais mas também estender elas.

Nos Blueprints a função mais comum é a Begin Play, ela é chamada assim que o Actor passa a existir no mapa, é usada pra inicializar algumas propriedades, carregar alguma coisa, é extremamente útil, mas se você tiver uma classe pai e no Begin Play da classe atual você simplesmente colocar um monte de chamadas lá, ele sobrepõe a chamada do pai. Então o ideal é chamar o Begin Play da classe pai, isso pode ser feito para todas as classes acima. Eu apanhei muito pra descobrir como fazer isso, tentava referenciar a classe e chamar o Begin Play dentro do Begin Play da classe filho e nada. Já tinha visto blueprints da UE usando uma chamada de Begin Play diferente. Mas não conseguia fazer de forma alguma, depois de 1 hora, sério, levei cerca de 1 hora para descobrir como fazer.

Eis a solução:

Clique com o direito na função beginplay > Add call to Parent Function. Vai ser criado um node laranja conecte o Begin Play nele e depois faça o restante a partir do node laranja.

Simples assim!

Um exemplo prático do uso da classe pai:

Uma classe pai de um Actor que faria parte de uma cadeia de objetos que usariam eletricidade. E um objeto filho, uma lampada por exemplo que precisaria pegar da classe pai se ela inicia ligada ou desligada.

Criei uma classe pai com duas variáveis uma float chamada ElectricityAmount e uma bool chamada HasEnergy.
A função dessa classe pai é quando iniciar verificar o valor no ElectricityAmount, se for maior que 0 seta a variável HasEnergy para true, se não for seta para false.

Com o blueprint criado é hora de criar o filho, o blueprint que seria a lâmpada.
Existem duas formas de fazer isso, na hora da criação:

Basta digitar o nome da classe pai que deseja usar. E será criado um Actor usando a classe pai.

Ou você pode criar um actor e em Class Settings Selecionar a classe pai.

O novo blueprint passa a herdar todas as variáveis e funções da classe pai. Podendo serem sobrepostas ou estendidas.

Agora no nosso Blueprint filho chamamos primeiro o Begin Play da classe pai, e depois o que desejamos fazer, no nosso caso queremos ver se o sistema elétrico tem energia para podermos ligar a luz.

Baseado na inicialização da classe pai fazemos a inicialização do nosso objeto final, usando resultados vitais da inicialização da classe pai.

É isso 🙂