domingo, 6 de setembro de 2020

Criando um Blueprint baseado na classe C++ TutoProjectCollectable

Neste artigo vamos criar um Blueprint que usará a classe C++ TutoProjectCollectable como classe pai. Esta é uma forma comum de trabalho na Unreal Engine, onde você cria uma classe base em C++ com diversas funcionalidades e cria uma classe filha em Blueprint para poder modificar algumas propriedades diretamente no editor.

Antes de criarmos o Blueprint, adicione e selecione uma instância de TutoProjectCollectable no nível, e veja na aba Details que dá para modificar o Static Mesh e o Material usado por esta instância, como mostra esta imagem:


Mas se você quiser criar outro tipo de item que pode ser coletado pelo jogador, é melhor criar um Blueprint baseado em TutoProjectCollectable. Desta forma o Blueprint herdará toda a funcionalidade que já foi criada e poderemos definir outro Static Mesh padrão para este novo tipo de item. Neste novo Blueprint também poderemos mexer nas variáveis que definem a área de jogo.

Vamos criar um Blueprint com o nome BPTutoProjectCollectable.  No Content Browser, acesse a pasta TutoProject que está dentro da pasta C++ Classes. Clique com o botão direito na classe TutoProjectCollectable e escolha a opção Create Blueprint class based on TutoProjectCollectable, como mostra a imagem abaixo.  


Na tela seguinte coloque BPTutoProjectCollectable no campo Name. No campo Path, escolha a pasta Blueprints que está dentro da pasta ThirdPersonCPP e clique no botão Create Blueprint Class.


Dê um clique duplo no novo Blueprint para abrir o editor de Blueprint. Vá na aba Components e selecione StaticMesh como mostra a imagem. 


Na aba Details você pode mudar o Static Mesh e o Material que serão usados pelas instâncias deste Blueprint. Para o Static Mesh selecione Shape_NarrowCapsule, e para o Material selecione M_Tech_Hex_Tile_Pulse. Ambos são do Starter Content


Agora clique no botão Class Defaults do editor de Blueprint. Procure nas propriedades as categorias Tutorial e Game Area como mostra a imagem abaixo. Nestas categorias estão as variáveis que criamos na classe C++ TutoProjectCollectable usando UPROPERTY(). 


Essas e outras variáveis foram herdadas da classe pai. Você pode modificar os valores das variáveis da categoria Game Area para definir a área onde poderão ser criadas as instâncias deste Blueprint. As variáveis de Game Area só aparecem no editor de Blueprints. Elas não vão aparecer na janela de propriedades das instâncias que estão no nível. Isto ocorre porque definimos estas variáveis usando o especificador EditDefaultsOnly no UPROPERTY().

Compile o Blueprint e adicione algumas instâncias deste Blueprint no nível. Teste o jogo e observe que quando o jogador coleta as instâncias deste Blueprint ele ganha os pontos da mesma forma quando é coletado uma instância da classe C++ TutoProjectCollectable. É porque toda a funcionalidade da classe C++ TutoProjectCollectable foi herdada por este Blueprint. Este é um princípio chave da programação orientada a objetos.