‫Olá e bem-vindo.
‫Nesta palestra, vamos estabelecer a ligação entre o motor e o gatilho usando uma técnica chamada injeção de
‫dependência para que, no final da palestra, se colocarmos a gárgula, a porta se mova para
‫baixo, ou pelo menos parcialmente faz.
‫Vamos mergulhar e ver como isso funciona.
‫E eu pego um copo.
‫Vimos que existe uma dependência, o que chamamos de dependência para o handle físico.
‫Este grabber não pode fazer seu trabalho a menos que você tenha um componente de alça de física em algum lugar agora, acontece
‫que o componente de gatilho é o mesmo.
‫O componente acionador, para fazer seu trabalho corretamente, precisa ter acesso a um componente movedor.
‫No entanto, é um pouco mais complicado neste caso porque com certeza, no caso de nossa porta secreta,
‫o gatilho e o objeto em movimento estão dentro do mesmo ator.
‫Assim, você pode obter um objeto encontrando o componente a do tipo no ator.
‫Mas e se tivermos essa situação no meu roteiro em que eu quero que meu gatilho esteja em
‫uma parte diferente da sala do ator que está se movendo bem para permitir esse tipo de flexibilidade.
‫Queremos que o gatilho não precise ir e encontrar suas próprias dependências.
‫E na verdade existe um nome para esse tipo de conceito de programa.
‫É chamado de injeção de dependência.
‫Basicamente, é no caso em que temos algo que diz, preciso de outro objeto, mas não
‫consigo encontrá-lo sozinho ou não quero encontrá-lo sozinho.
‫E muitas vezes é sensato não deixar isso para o objeto que está fazendo seu próprio trabalho, fazendo com que ele tenha outro
‫trabalho de tentar se apossar de um objeto.
‫Então, a maneira como podemos fazer isso é criar um mecanismo para blueprints para dizer ao componente de gatilho onde
‫encontrar um movedor.
‫E a maneira como faremos isso é criando uma função de blueprint que pode ser chamada em nosso componente de gatilho.
‫Então vai ser público.
‫Vamos colocá-lo na seção pública abaixo do componente tick, e será uma
‫função U para que possa estar entre parênteses, blueprint callable.
‫E não precisa haver muito para esta função.
‫Será nulo porque não precisa retornar nada, mas será definido como movedor, portanto, definirá um
‫link para o movedor e, para definir um link para o movedor, será necessário receber um
‫ponteiro para um componente movedor.
‫Então essa será a sua estrela motora e podemos chamá-la de movedora assim e colocar ponto e vírgula no final
‫dessa linha.
‫E precisamos guardar isso em algum lugar.
‫Então vamos criar uma nova variável privada.
‫Não será uma nova propriedade e será apenas um ponteiro de movimento em U,
‫que também chamaremos de movedor.
‫Assim e o que vamos fazer é implementar esse movedor de conjunto no CPP para que ele defina um ponteiro para esse
‫movimento, que por padrão será nulo.
‫E temos que fazer mais uma coisa.
‫Temos que incluir o arquivo de cabeçalho para o nosso movedor.
‫Agora, neste caso, como o arquivo de cabeçalho está na mesma pasta que
‫o componente do acionador, tudo o que precisamos fazer é incluir o hash do movedor H e isso garantirá que o componente do acionador esteja ciente do
‫tipo do movedor.
‫Então, vamos para o nosso componente de gatilho.
‫CP E vou colocar isso abaixo do nosso componente tick que vamos implementar set mover.
‫Vamos colocar a classe que você aciona o componente antes e indentá-lo.
‫Remova o ponto e vírgula e adicione chaves.
‫E essencialmente tudo o que teremos que fazer aqui, vamos alterar o nome apenas no arquivo C++.
‫Na verdade, não importa se o nome dos parâmetros corresponde entre header e C++.
‫Então podemos mudar aqui e dizer que o novo motor é o que está chegando para definir o motor.
‫E assim podemos definir nossa variável local, nossa variável de classe mover igual ao novo motor like.
‫Então agora é realmente muito importante que você não pule esta etapa de renomeação porque se o parâmetro de
‫entrada for o mesmo nome de uma das variáveis na classe, então unreal por padrão definirá isso como um erro.
‫É chamado de sombreamento e o Unreal não quer que você faça isso, então você precisa ter certeza de ter
‫o nome do seu parâmetro diferente da variável agora porque essas novas funções nem sempre aparecem com alterações
‫de codificação ao vivo.
‫Vou fechar a recompilação do editor do código do Visual Studio e, em seguida, reiniciar a partir do novo
‫projeto.
‫Agora vamos para a gaveta de conteúdo, abra nosso plano de parede secreta e, em
‫seguida, do nosso nó Begin Play no gráfico de eventos, vamos sair daqui e procurar por set mover.
‫Agora observe que há duas opções aqui.
‫Um, seria definir o componente que também é chamado de movedor, e o outro é uma função no componente de
‫disparo.
‫Então, queremos selecionar aquela que é uma função no componente trigger.
‫E então o que queremos fazer é arrastar nosso componente movedor como os outros argumentos para esta função e isso
‫deve funcionar.
‫É definido o motor no início do jogo.
‫Então, agora, essencialmente, o que queremos que aconteça é que nosso componente de gatilho deve estar
‫definindo e definindo o deve mover booleano aqui.
‫Então, esse será meu desafio para você criar algumas funções públicas em mover e mover.
‫CP Deve ser definido, deve mover e deve atualizar essa variável de propriedade.
‫Na verdade, você pode fazer com que não seja mais uma nova propriedade porque vamos defini-la por meio de
‫código agora e então você pode colocá-la na seção pública.
‫Ele precisa ser público porque vamos tentar acessá-lo do nosso componente de gatilho.
‫E você pode chamá-lo no ponteiro do movedor que temos no componente acionador da configuração do componente
‫de marcação, o booleano apropriado, se queremos desbloquear ou bloquear novamente, pausar o vídeo
‫e tentar.
‫Ok bem vindo de volta.
‫Então eu vou remover a propriedade de should move Vou para
‫a seção pública logo abaixo do componente TTIC e vou criar um conjunto void should move levando um booleano que
‫vamos chamar should mova-se assim.
‫E então vamos pegar isso e ir para o move CP e implementá-lo, substituindo o ponto e
‫vírgula, adicionando a classe you move dois pontos, dois pontos e, basicamente, novamente podemos chamar isso de novo deve mover
‫e podemos dizer que deve se mover é igual a novo deve se mover.
‫Agora você pode estar se perguntando, por que não tornamos as próprias variáveis publicamente acessíveis
‫para que possamos defini-las diretamente?
‫Isso geralmente não é uma boa prática em C++ porque se você deixar alguém alterar suas variáveis, você nunca saberá o que
‫pode estar acontecendo com eles.
‫Considerando que, se você tiver um método para fazer isso por você, ele permitirá que você altere mais tarde como estrutura as
‫variáveis internas sem precisar alterar suas funções públicas, o que significa que há menos atualizações para diferentes classes
‫que você precisa fazer.
‫Então, geralmente, como regra, sempre usamos setters e getters se precisarmos acessar variáveis em outras
‫classes.
‫Agora que criamos essa nova função, vamos para o componente trigonométrico CP, onde atualmente temos
‫nossas mensagens de log.
‫O que queremos fazer é acessar nosso ponteiro de movimento, então vamos fazer o conjunto de seta do motor deve se mover.
‫E no caso de termos um ator aceitável, isso deve ser verdade.
‫Devemos mover o ponto e vírgula no final da linha.
‫E no caso contrário, bem, então provavelmente não deveríamos.
‫Então vamos mover o conjunto de setas deve mover e entre parênteses colocar false remover aquele R extra que eu tinha no
‫final do meu método e vamos recompilar agora neste caso porque eu só adicionei essa função no
‫terreno C++ e não é chamado de blueprint.
‫Eu não acho que eu realmente precise reiniciar o editor para esta funcionalidade funcionar, fechar nosso log
‫de saída, ir em direção a nossa gárgula e começar a jogar e pegá-lo.
‫Vamos sair desta gaiola e enfiá-la na alcova e eles vão, está descendo, mas para assim que a gárgula cai, o
‫que não é o ideal porque a gárgula não está realmente no lugar e a parede
‫não está totalmente para baixo.
‫E porque está simulando física, vai sair daquela alcova, não é?
‫Então, o que precisamos fazer é ter certeza de que, uma vez que o soltamos em nossa área de gatilho, ele seja consertado
‫lá e permaneça.
‫Então esse será o assunto da próxima palestra.
‫Eu te vejo lá.