‫Olá e bem-vindo.
‫Nesta palestra vamos gerar nosso rifle em tempo de execução da nossa classe de personagem em C++.
‫Vamos mergulhar e ver como é feito.
‫OK.
‫Então, queremos que nossa arma desova.
‫Como filho do personagem de filmagem, o primeiro ponto de chamada é ser capaz de gerar esse ator de dentro
‫de outro ator.
‫Nós vamos fazer isso em tempo de execução.
‫Vamos começar a jogar porque é assim que você pode fazer isso quando está desovando.
‫Os atores precisam fazer isso em tempo de execução.
‫E a maneira como vamos fazer isso é que vamos nos apossar do mundo primeiro.
‫Então pegue mundo e então vamos chamar uma função em Obter Mundo, aliás, mundo e nível como sinônimos.
‫Então, o que estamos realmente fazendo aqui é subir ao nível e dizer,
‫ei, nível, você pode criar como ator porque todos os atores essencialmente pertencem ou vivem em um nível.
‫Então estamos dizendo, você sabe, spawn ator para mim, por favor.
‫E este é um ator de desova que usa um modelo.
‫Então você pode dizer, eu quero que esse ator que eu vou gerar seja uma arma tipo A.
‫E para que isso funcione, vamos precisar ter um include aqui em cima hash include para a arma.
‫H.
‫E então vamos pegar um argumento e o argumento para gerar é, na verdade, pode ser um tipo de classe.
‫Então, por padrão, ele irá em frente e gerará o C++.
‫Mas aqui queremos gerar o filho do projeto desta arma.
‫Então, precisamos descobrir o que será que precisa ser conectado no Blueprint.
‫Ele não pode ser conectado aqui em C++, pelo menos não facilmente.
‫O melhor lugar para fazer isso é no Blueprint.
‫Então, vamos fazer um ALLO para ir para o arquivo de cabeçalho do nosso personagem atirador e adicionar
‫uma nova propriedade você aqui.
‫Para nos permitir configurar a classe que devemos apontar para gerar um ato.
‫Qual classe de projeto devemos gerar desse personagem de atirador?
‫Vamos tê-lo apenas como padrão de edição e editar padrões apenas porque não queremos editar isso em tempo de execução porque daria uma falsa impressão de que
‫você pode alterar o tipo de arma que estamos usando tempo de execução,
‫enquanto a seleção de peças já foi chamada de que as armas já foram
‫geradas e, portanto, não atualizaria nada.
‫Portanto, não queremos torná-lo editável para não dar às pessoas uma falsa impressão do que pode ser feito.
‫E então aqui vamos usar uma macro chamada subclasse T da qual você pode ou não ter encontrado
‫antes.
‫E a subclasse T é um modelo.
‫Então, usamos esses colchetes angulares novamente e queremos dizer uma subclasse de arma.
‫E basicamente o que isso significa é que ele permite que os blueprints restrinjam as classes das
‫quais podemos selecionar apenas as classes que são subclasses da classe Gun C++.
‫Agora, isso não será um ponteiro porque não estamos apontando para uma instância real da arma.
‫O que estamos obtendo aqui nesta variável é uma classe em si.
‫Nesse caso, é uma classe blueprint, mas ainda é uma classe.
‫Então, vamos chamar isso de classe de arma, só para deixar bem claro que não é
‫a arma em si.
‫Queremos outra propriedade aqui para armazenar a arma e isso não será um padrão de edição.
‫Então, basicamente, não queremos tornar isso uma propriedade visível, mas será em um ponteiro de
‫arma.
‫Veja a diferença?
‫Um deles é uma subclasse t de arma, o outro é um apontador de arma e este é a arma real.
‫Assim que criamos uma instância da classe, é onde vamos armazená-la.
‫Então vamos para o nosso shooter c p e terminar este jogo inicial onde estamos gerando coisas, então vamos ter uma arma
‫igual para fazer o spawn do mundo agir como uma arma e o argumento vai passar
‫aqui é a classe da arma que vamos definir em plantas.
‫Então vamos tentar compilar isso.
‫Pode nos dar alguns erros.
‫Vamos ver, eu tenho o log de mensagens aberto com o log de compilação.
‫E com certeza, estamos recebendo alguns erros aqui no arquivo principal dizendo identificador não declarado
‫porque precisamos encaminhar a declaração da arma.
‫Então eu só vou fazer isso no topo.
‫Isso é em dois lugares que eu vou dizer classe.
‫Uma arma como a visão.
‫E apenas um lembrete, uma declaração antecipada como essa significa que podemos manter nossos tempos de compilação baixos, não
‫incluindo muito na cabeça pesada dos arquivos.
‫Vamos tentar recompilar e ver.
‫Parece que esse foi o único erro.
‫Agora foi compilado com sucesso.
‫Vamos em frente e aperte o play e veja o que acontece.
‫Saída.
‫Dê uma olhada no nosso.
‫Basicamente, queremos dar uma olhada no carregamento de mensagens, que não tenho aberto.
‫Então, vamos para as ferramentas de janela e desenvolvedor e dê uma olhada no log de saída e veja se temos algum erro aqui.
‫Sim.
‫O ator Spawn falhou porque nenhuma classe foi especificada.
‫Certo.
‫Nenhuma classe foi especificada porque ainda não a configuramos no blueprint.
‫Então, isso eu vou salvar como um desafio para você conectar a arma, encontrar a propriedade em nossos projetos
‫de personagens, configurá-la para a arma correta e testar se ela gera.
‫Pause o vídeo e vá em frente.
‫Ok, bem-vindo de volta.
‫Então vamos ao nosso personagem atirador, BP, e encontrar a propriedade que deve estar na rota ou na
‫classe.
‫Padrões entram em detalhes e filmam um personagem.
‫Você pode ver que temos uma rotação aqui que configuramos e temos nossa classe de arma, que é um
‫menu suspenso que me permite escolher entre a arma ser a arma C++.
‫E é aqui que uma convenção de nomenclatura é útil.
‫As coisas prefixadas com sublinhado BP são as plantas.
‫Então, queremos o rifle de sublinhado AB BP.
‫Nós iremos em frente e selecionaremos o salvamento de compilação, iremos até a cena e apertaremos o play.
‫Agora, espero que não tenhamos nenhum erro sobre a geração de uma arma.
‫A arma deveria ter gerado.
‫OK.
‫E para descobrir se tem, podemos F8 e dar uma olhada no contorno do mundo.
‫Se eu aumentar um pouco o contorno do mundo, posso procurar pelo rifle de sublinhado BP.
‫Viva.
‫Temos um rifle de sublinhado da BP no momento em que está no meio do nada e não é uma identificação infantil correta.
‫Esse será o assunto da próxima palestra.
‫Então eu vou te ver lá.