‫Olá e bem-vindo de volta.
‫Agora, já criamos nossa classe de projéteis e estamos prontos para começar a gerar essas
‫coisas no nível para que possamos lançá-las nas torres e, eventualmente, destruí-las.
‫Agora, a geração de atores envolverá a função de geração de atores.
‫Então, vamos aprender como isso funciona neste vídeo.
‫Agora, vamos falar sobre gerar o projétil.
‫Isso é algo que gostaríamos de fazer do lado C++ das coisas.
‫Vamos chamar funções C++ para criar novos objetos dinamicamente no mundo.
‫Agora estamos gerando do lado C++ das coisas, mas gostaríamos de gerar um objeto com base no projeto de
‫nossa classe de projétil.
‫A razão é porque temos um projeto baseado na classe A Projectile C++, que contém
‫informações adicionais.
‫Especificamente, ele tem esse conjunto de propriedades de malha.
‫Escolhemos a malha para nosso componente de malha estática.
‫Portanto, não podemos apenas gerar a versão C++.
‫Temos que gerar a versão do blueprint para obter essa malha.
‫Então a questão é como geramos um objeto em C++, que é baseado em um blueprint?
‫Bem, vamos aprender sobre algo chamado PT Subclass de agora este é um template.
‫E, como muitos modelos, os colchetes angulares exigirão um tipo.
‫Portanto, usar a subclasse PT de requer um parâmetro de tipo.
‫E isso nos permite ter uma variável que armazena algo chamado classe U.
‫A classe U representa um tipo de classe, mas também tem a capacidade de interagir com o sistema de reflexão do
‫mecanismo irreal.
‫Quando digo reflexão, quero dizer troca de informações entre o C++ e o lado do blueprint.
‫PT subclass of, como o nome sugere, nos permite armazenar uma variável que representa uma classe baseada no
‫tipo que estamos passando ou uma subclasse desse tipo escolhido.
‫Isso significa que podemos escolher um tipo e t subclasse de pode conter uma classe u que representa esse tipo ou
‫qualquer tipo derivado dele.
‫E isso inclui projetos baseados no tipo.
‫Então vamos ver como essa subclasse t de coisa funciona.
‫OK.
‫Então, estou de volta aqui na base pom e a razão pela qual estou na base pod é porque queremos que
‫esse projétil esteja nas classes tanque e torre.
‫Ambas as classes vão gerar projéteis.
‫Então eu gostaria de uma subclasse t de variável aqui.
‫Então, vou dizer t subclasse de e nos colchetes precisamos passar um tipo.
‫Agora podemos encaminhar a declaração mesmo dentro de colchetes como este.
‫E eu vou fazer do tipo um projétil.
‫E a razão é porque criamos a classe projétil e seu tipo é um projétil.
‫Então vou criar essa variável e vou chamá-la de classe de projétil.
‫Agora, isso nos permitirá ter uma variável C++ que representa um tipo de classe, e o tipo pode ser baseado
‫em um projétil, até mesmo um tipo de classe blueprint baseado nisso.
‫Agora vou dar uma propriedade U.
‫E porque eu gostaria de poder editar isso, pelo menos no blueprint padrão, vou
‫tornar essa edição padrão.
‫Só agora podemos dar a isso uma categoria.
‫Vou colocá-lo em uma categoria chamada combate.
‫Agora vamos em frente e compilar isso.
‫Ok, então estou de volta ao editor e vou para a pasta blueprints e de lá para
‫a pasta Pons.
‫E eu vou abrir o BP -- tanque e abrir o editor de plantas completo.
‫Agora, se eu olhar no painel de detalhes, posso procurar combate.
‫Aqui está.
‫E aqui está a variável de classe do projétil.
‫Esta é aquela subclasse que chamamos de classe de projétil.
‫Agora observe que podemos configurá-lo aqui e podemos configurá-lo usando um menu suspenso.
‫E se clicarmos no menu suspenso, temos três opções.
‫Podemos configurá-lo para none, que é o que é configurado por padrão, o que basicamente significa que é um ponteiro nulo.
‫Ou podemos configurá-lo para projétil ou projétil BP.
‫É isso que a subclasse de nos permite fazer é definir essa classe de projétil para um tipo específico baseado em projétil,
‫já que esse é o tipo que escolhemos quando criamos a variável.
‫Agora projétil aqui.
‫Esta é a classe C++ chamada projétil em C++.
‫É um projétil, mas o projétil BP é um projeto baseado na classe de projéteis C++ e podemos escolher
‫isso.
‫E agora a classe do projétil está configurada para o tipo de projétil BP.
‫Agora, isso não é um componente e não é um objeto de projétil BP.
‫Não é isso.
‫Ele armazena um tipo, mais especificamente um U.
‫Tipo de aula.
‫E como eu disse, sua classe tem uma funcionalidade interna que permite que a reflexão funcione entre C++ e
‫blueprints.
‫As informações podem fluir entre C++ e blueprints.
‫Então agora temos a classe de projétil, uma subclasse PT de conjunto para o tipo de projeto de projétil BP.
‫Então, por que se dar ao trabalho de criar uma subclasse de variável?
‫Bem, precisamos discutir como funciona a função do ator de desova.
‫O ator de desova é uma função pertencente à nova classe mundial.
‫Então, se conseguirmos controlar o mundo, podemos chamar o ator Spawn.
‫E o ator Spawn é outra função de modelo e foi projetada para criar novos objetos semelhantes a criar
‫um subobjeto padrão.
‫Mas criar subobjeto padrão é projetado para criar componentes e só podemos usá-lo no construtor para que um determinado
‫ator de geração de classe possa ser chamado em tempo de execução enquanto o jogo estiver em execução e pode
‫criar atores.
‫Agora é um modelo, então requer um tipo.
‫Se quisermos gerar um projétil, então passaríamos no tipo de classe C++ aqui um projétil.
‫Esta é a classe C++ que é retornada pela função spawn ator em C++.
‫Agora os parênteses recebem vários parâmetros, incluindo uma classe U.
‫Agora, existem várias sobrecargas dessa função que recebem diferentes parâmetros de entrada.
‫O mais simples talvez seja a versão que leva uma classe U, um local e uma rotação.
‫O U.
‫Classe é o que representa o tipo a ser gerado.
‫Este é o tipo real do objeto que é gerado.
‫Esta poderia ser uma classe de projeto.
‫A localização é um vetor F especificando onde gerar o objeto e a rotação especificará sua rotação.
‫Então, um exemplo da sintaxe se parece com isso.
‫Chamaríamos o ator spawn especificando o tipo de classe e, em seguida, passando as informações da classe u junto com
‫o vetor de localização e o rotador de rotação.
‫Então, vamos falar sobre sua classe por um segundo.
‫Agora, como temos dito, sua classe representa um tipo de classe.
‫Quando chamamos o ator Spawn, passamos uma classe U para fornecer à função do ator spawn informações sobre
‫o objeto a ser gerado.
‫Sim, passamos um tipo entre colchetes angulares, mas isso simplesmente informa ao ator Spawn o tipo C++ a ser
‫criado.
‫Considerando que sua classe contém mais informações.
‫Digamos que criamos um projeto baseado em um projétil e no projeto definimos algumas propriedades, como escolher
‫a malha estática para o componente de malha estática.
‫Agora, se apenas gerarmos uma classe C++ bruta, essa malha estática não será definida no objeto
‫de projétil recém-gerado.
‫Essencialmente, estaríamos apenas gerando um novo ator invisível.
‫No entanto, uma nova variável de classe pode representar uma classe de blueprint.
‫Sua classe nos dá a capacidade de ter uma variável no lado C++, que representa um blueprint, tipo
‫de classe e spawn.
‫O ator pode usar essa classe como um argumento de entrada para que possa gerar um novo objeto com base no
‫blueprint representado por essa nova classe.
‫Portanto, um novo projétil terá sua propriedade de malha estática definida porque estamos gerando um novo objeto com
‫base no blueprint e não na classe C++ bruta.
‫É por isso que criamos nossa subclasse de porque ela pode armazenar uma nova classe e fomos capazes
‫de defini-la igual ao projétil BP do nosso BP -- projeto de tanque.
‫Então agora você sabe como gerar atores.
‫O ator Spawn pertence à nova classe mundial.
‫Então, se você chamar get world e simplesmente chamar o ator Spawn, então você conhecerá os requisitos
‫de entrada para essa função que você passa no tipo C++ entre colchetes angulares e classifica um local e uma
‫rotação entre parênteses.
‫Então, para o seu desafio, você vai gerar o projétil, faça isso na função de fogo.
‫Então chame o ator de geração mundial e passe um projétil nos colchetes.
‫Isso significa que você precisará incluir o arquivo de cabeçalho para o projétil.
‫Portanto, não se esqueça disso e use nossa nova classe de projétil variável como o parâmetro de entrada da classe U
‫entre parênteses.
‫Agora precisamos de uma localização e uma rotação.
‫Você vai usar o ponto de desova do projétil para localização e rotação.
‫Do componente do ponto de geração de projéteis.
‫Você pode chamar get component location e obter rotação de componente para acessar esses valores.
‫Então pause o vídeo e chame o spawn ator na função de fogo agora.
‫OK.
‫Então vamos para o Base Pond CP onde temos a função fire definida.
‫Agora temos desenhar a esfera de depuração aqui.
‫Nós realmente não vamos precisar mais disso.
‫Então, vou deletar essa chamada de função e, em vez disso, vou chamar o ator Spawn aqui.
‫Agora já temos a localização do ponto de spawn do projétil.
‫Vou renomear esta variável local para simplesmente location e vou criar um novo rotador F.
‫Chamado de rotação.
‫E isso eu vou conseguir do ponto de desova do projétil também.
‫Então, será o ponto de geração do projétil para obter a rotação do componente.
‫Então agora eu tenho a localização e a rotação para gerar o projétil.
‫Então, em seguida, preciso chamar spawn ator para poder chamar get world.
‫E do mundo que recebo dessa função, posso chamar spawn ator.
‫Agora, isso tem colchetes e parênteses, certo?
‫Então, nos colchetes, preciso usar um projétil.
‫E como estamos usando um projétil, precisamos incluir o cabeçalho para isso.
‫Então aqui em cima, vou remover, desenhar auxiliares de depuração e substituí-lo por projétil.
‫Então agora temos esse tipo incluído.
‫Agora precisamos da classe U e com base em H tem classe projétil, podemos usar isso como a classe U.
‫Então vamos passar na aula de projéteis.
‫Agora, finalmente, podemos passar a localização e a rotação e isso satisfará a função do ator de desova.
‫Então, vamos compilar isso e voltamos aqui no editor e podemos testar o jogo.
‫Então eu vou em frente e clicar e verificar isso.
‫Geramos um novo projétil.
‫Estamos gerando o projétil na ponta do nosso barril e eles meio que pairam no ar, o que
‫realmente não parece certo.
‫Mas está tudo bem.
‫Este é o primeiro passo.
‫Primeiro temos que gerar o projétil, fazendo com que ele aja como um projétil como o próximo passo.
‫Então, em resumo, agora estamos gerando projéteis.
‫Este é um grande marco.
‫No entanto, eles ainda não são projéteis.
‫Eles apenas pairam lá e os projéteis devem voar pelo ar.
‫Então, no próximo vídeo, vamos falar sobre como fazer nossos projéteis voarem pelo ar
‫para que ajam como projéteis.
‫Vejo você em breve.