‫Olá e bem-vindo.
‫Nesta palestra, vamos criar uma arma e vamos aprender como vamos arquitetar armas
‫para este jogo para que possam ser trocadas, para que possamos ter diferentes propriedades em diferentes tipos
‫de armas.
‫E geralmente é assim que as arquiteturas funcionam em jogos de tiro em primeira ou terceira pessoa, vamos mergulhar e ver como isso
‫é feito.
‫OK.
‫Portanto, não verificamos nosso plano de projeto há algum tempo.
‫Não chegamos ao movimento do plano.
‫Está feita a animação por enquanto, está feita.
‫E a filmagem, essa é a próxima coisa em que devemos nos concentrar.
‫Agora, é um pouco confuso aqui porque nossa malha já parece ter uma arma, mas na verdade não
‫queremos usar essa arma.
‫Queremos usá-lo de uma maneira diferente.
‫Por estar em um tipo de jogo de tiro, muitas vezes você quer poder alternar entre armas ou
‫pelo menos ter personagens diferentes, armas diferentes.
‫E a maneira mais fácil de fazer isso é arquitetar a arma como uma coisa separada do personagem para que
‫você possa trocá-las para que ele possa ser responsável por como atira.
‫Se for um lançador de foguetes, uma espingarda ou um rifle, eles farão as coisas de maneiras diferentes.
‫Agora, você pode dizer, ok, bem, vamos criar um componente de arma e podemos colocar esses componentes de
‫arma sob nossa malha.
‫Isso funcionaria, exceto que perdemos a modularidade que nos permite adicionar vários componentes à
‫arma.
‫Então, o que realmente queremos fazer é seguir o caminho de ter um ator para a arma que é a identificação infantil do
‫personagem do atirador.
‫Agora, isso é algo que não encontramos antes, mas funciona assim.
‫Você pode ter um personagem atirador e uma arma como filho, e o personagem atirador pode ter vários componentes que
‫são filhos um do outro.
‫Então você tem a cápsula, nós temos a malha como filha da cápsula no momento, e
‫os componentes da arma podem ser protegidos contra isso.
‫Assim, a malha obtém o ID filho da malha do personagem.
‫E se tiver outros componentes, como talvez um efeito de partícula no cano da arma, isso pode ser
‫o ID filho da malha.
‫Então você pode ver que essas hierarquias são meio independentes, que você tem os componentes da
‫cena, aqueles que se transformaram à direita, e eles podem estar em uma certa hierarquia.
‫E então a hierarquia de atores realmente segue a hierarquia dos componentes da cena.
‫Os atores não têm uma hierarquia própria.
‫Esta é a parte que leva um pouco de tempo para entender.
‫Foi um momento aha quando clicou para mim.
‫Será que na verdade não existe hierarquia de atores, existe apenas uma hierarquia de componentes de cena.
‫Existem atores que possuem os mesmos componentes e então eles acabam tendo uma hierarquia porque seus
‫componentes de cena estão relacionados entre si, mas na verdade eles não têm uma relação entre si.
‫Dito isso, para definir o contexto, a primeira coisa que queremos fazer é realmente criar
‫um ator de armas C++.
‫E neste caso, não será um peão ou personagem ou algo assim.
‫Vai ser um ator direto porque não precisamos de nenhum comportamento.
‫Você não precisa possuí-lo, nós não precisamos fazer nada.
‫É apenas um ator simples, simples.
‫Então vamos em frente e fazer isso.
‫Na verdade, um pequeno desafio para você.
‫Vá em frente e crie esse ator C++, algo que você deve ser capaz de fazer um pequeno minidesafio, tente.
‫Ok, estou de volta.
‫Eu estou indo fazer isso.
‫Nova classe C++ e não precisamos de vamos ver, ator.
‫Isso é tudo o que queremos escolher.
‫E vamos em frente e chamar isso de uma arma, simples como vamos criar essa classe.
‫Ok?
‫E uma vez feito isso, ele aparecerá no seu editor de código.
‫E não precisamos fazer nada com isso ainda porque a primeira coisa que quero fazer é criar uma subclasse
‫de blueprint.
‫Então, clique com o botão direito na sua classe no navegador de conteúdo e em vez de chamá-la de Mike e eu não sei
‫quais padrões automáticos essa arma de sublinhado da BP, vou colocá-la na raiz do conteúdo quatro Agora podemos fazer um
‫pouco de reorganizando assim que tivermos mais turmas.
‫Como eu disse antes, vamos criar a classe Blueprint.
‫Como você pode ver, está completamente vazio.
‫Ele tem essa raiz de cena padrão.
‫Nós vamos querer consertar isso.
‫O que queremos fazer é adicionar um componente em C++ porque este é um curso de C++.
‫Vamos praticar o músculo de adicionar componentes em C++.
‫Isso também significa que teremos acesso a esses componentes de dentro de nosso código C++ para manipular e
‫escrever nosso código que agora a configuração que queremos é ter um componente raiz de cena, que será apenas
‫componentes de cena e, em seguida, uma malha que é filha disso.
‫Por que queremos isso?
‫Porque queremos poder alterar a posição da malha em relação às raízes da arma para que possamos basicamente
‫colocar a alça em locais diferentes para malhas diferentes.
‫Então, se tivermos armas diferentes, podemos garantir que todas tenham as alças no mesmo lugar.
‫Então, quando o anexamos à mão do personagem, ele aparecerá com a alça na mão do personagem.
‫Ok, então como vamos fazer isso?
‫Vamos para o nosso código do Visual Studio, e vou criar uma seção privada aqui onde vamos
‫armazenar as novas propriedades para os diferentes componentes que vamos
‫criar.
‫Então vou criar uma nova propriedade visível em qualquer lugar.
‫Queremos que nossos componentes sejam visíveis em qualquer lugar porque seus ponteiros
‫de ponto, não queremos poder editar os ponteiros, mas queremos poder ver as propriedades desses ponteiros e poder.
‫Aqueles.
‫E isso se torna o alcance da classe para a qual estamos apontando.
‫Isso então decide o que é mostrado, o que é editável.
‫Então, tudo o que queremos dizer aqui é que não é o ponto de ser editável.
‫Então é por isso que ir para visível de qualquer maneira.
‫Enfim, um pouco de revisão lá.
‫Agora queremos que isso seja uma visão porque é um componente.
‫Então é um componente de cena que estamos querendo.
‫Se eu puder digitá-lo corretamente, eu vi componentes e é um ponteiro para ele e este
‫será nosso componente raiz.
‫Igual a.
‫E então vamos querer uma nova propriedade.
‫Novamente visível em qualquer lugar.
‫Para nossa malha.
‫A classe para a malha será composta por alguns componentes estáticos do MASH, porque não é uma massa esquelética,
‫é rígida, não tem esqueleto, nenhum osso.
‫Então, eu quero que isso seja um indicador e isso só vai esfriar o mash assim.
‫Fato, acho que preciso ter um pouco de cuidado aqui porque acho que o componente raiz já existe
‫na classe pai para o ator.
‫Então, eu vou chamar essa rota em vez disso.
‫E então já temos um construtor no C++.
‫Nós vamos precisar incluir o apropriado -- aqui.
‫Agora, um pequeno truque quando você está no código do Visual Studio é descobrir onde um arquivo pode estar à frente.
‫Você usa o Control P e vai procurar.
‫Neste caso, queremos a malha estática.
‫Portanto, componentes de malha estática e podemos ver que os componentes de malha estática h se eu for em frente e abri-lo e passar
‫o mouse sobre a guia, você poderá ver que está sob esse longo caminho.
‫Mas o que é interessante é que está em classes, que então podemos olhar para
‫os componentes, componentes de malha estática, para que eu possa fechar essa guia e logo acima incluir um fato abaixo
‫do include para uma arma.
‫Faremos uma inclusão de hash para os componentes e, em seguida, para os componentes de malha estática.
‫Agora, na verdade, acabei de lembrar que as malhas que temos por algum motivo não são malhas estáticas como
‫acredito que possam ser.
‫Scott The Meshes, você pode descobrir isso acessando os pacotes de ativos, armas de jogos de tiro e dando uma
‫olhada nessas malhas.
‫E com certeza, se você passar o mouse sobre eles, poderá ver que são malhas esqueléticas.
‫Não me pergunte por quê.
‫Por alguma razão, é isso que eles são.
‫Então, vamos querer mudar o tipo para malha esquelética no arquivo de cabeçalho.
‫Então, em vez da malha estática, será usada a malha esquelética.
‫E o mesmo para a inclusão será o esqueleto.
‫Componente de malha ponto h que queremos lembrar.
‫Não há você nos arquivos de cabeçalho.
‫E acredito que os mesmos componentes já incluídos aqui por padrão.
‫Então é hora de um desafio para adicionar um componente de malha de sua preferência.
‫Vamos criar um componente de cena raiz, defini-lo como raiz e defini-lo como raiz para a classe e criar um componente
‫de malha e configurar o anexo entre os dois para que o componente de malha
‫seja um filho dessa raiz vista componentes, vídeo pulsado e experimente.
‫Ok, bem-vindo de volta.
‫Então, vamos passar por cima e estabelecer, em primeiro lugar, nossas raízes.
‫Será um sub-objeto padrão de criação do tipo.
‫Você viu componentes e então vamos dar um nome que vai ser com a macro de texto, vamos chamá-la de
‫raízes e terminar com o ponto e vírgula.
‫Então vamos defini-lo como a raiz.
‫Portanto, definir componentes raiz o definirá como o componente raiz para o ator.
‫Portanto, defina root como o componente raiz.
‫Coisa boa.
‫Então vamos querer criar nossa malha.
‫Então, mesh é igual a criar um subobjeto padrão e é o componente de malha esquelética que queremos como classe e, em
‫seguida, a macro de texto para chamá-la de malha e adicionar um ponto e vírgula.
‫E então queremos configurar o anexo.
‫Então, será uma seta de malha configurada.
‫Configure o anexo e vamos querer anexar à raiz como coisas tão legais para que possamos ir em frente
‫e salvá-lo e, com sorte, compilar e construir e vamos para o Unreal e dê uma olhada em nossa
‫classe filha.
‫E com certeza, aqui temos as raízes, temos a submalha, também temos essa raiz de cena padrão que
‫está por aí, acho que vamos reiniciar o editor e ver se isso simplesmente desaparece.
‫Às vezes, ao adicionar componentes, as coisas podem ficar assim e serem armazenadas em cache.
‫E com certeza, se abrirmos os projetos das armas BP novamente, você pode ver que acabamos de receber esses
‫dois componentes.
‫Adicionamos as raízes e a malha, e provavelmente queremos ir em frente e trocar a malha por uma das malhas
‫esqueléticas dos pacotes de ativos do jogo de tiro.
‫Temos um rifle, temos um lançador.
‫Eu vou escolher este para ser o rifle.
‫Então, na verdade, chamá-lo de uma arma BP é um pouco falso.
‫Este provavelmente deve ser o rifle BP.
‫Então vamos em frente e renomeie isso, vá até o navegador de conteúdo e renomeie para BP Rifle ou BP
‫Gun, underscore rifle.
‫Agora colete o rifle BP diretamente para eles.
‫E isso nos deu uma arma.
‫Agora, obviamente, agora isso significa que podemos ter todos os tipos de propriedades contra esse ator, como
‫a força da arma, seu alcance e assim por diante, criando novas propriedades em C++.
‫E essa é a força de ter essa arquitetura é que as armas podem ser um pouco diferentes.
‫Podemos ter diferentes mecânicas de tiro para rifles versus atiradores versus RPG e coisas assim.
‫Então isso é ótimo.
‫E também podemos ter estatísticas diferentes.
‫Assim, podemos ter um rifle forte e um rifle fraco dependendo das diferentes subclasses do projeto.
‫Coisas legais.
‫Agora, na próxima palestra, vamos ver como vamos realmente gerar essa arma como um
‫filho de nosso personagem atual.
‫Eu vou ver isso.