‫Olá e bem-vindo.
‫Nesta palestra, vamos montar um grabber para que possamos realmente pegar nossa estátua
‫de gárgula e levá-la conosco à nossa frente.
‫Vamos mergulhar e ver como fazemos isso.
‫Então é hora de começarmos a chamar essa alocação de componentes de captura com uma rotação.
‫Agora, como eu disse antes, na verdade há duas partes nisso.
‫Precisamos pegar o componente e depois precisamos definir sua localização de destino e rotação também para que
‫ele se mova.
‫Então as primeiras coisas primeiro.
‫Em nossa função grab, vamos precisar de um ponteiro para nosso handle de física.
‫Então eu vou copiar a linha de Begin Play e vou até o grabber e vou colocá-la
‫aqui.
‫E para nos protegermos disso ser nulo.
‫Bem, o que deve acontecer?
‫Bem, na verdade, não há nada que queremos fazer.
‫Se não tivermos uma alça de física, não podemos pegar nada.
‫Então, poderíamos colocar todo o corpo dessa função de captura em uma instrução if, mas isso pode parecer um
‫pouco confuso.
‫Então, o que podemos fazer é o que é conhecido como retorno antecipado.
‫Essencialmente, apenas dizemos se a física aguenta.
‫Igual a ponteiro nulo.
‫Você tem que colocar um sinal de igual duplo aqui.
‫Caso contrário, é uma atribuição.
‫Então podemos descer para fazer uns suspensórios e podemos simplesmente colocar um retorno aqui.
‫Então, o que isso vai fazer é se tivermos um null points para o handle de
‫física, ele retornará imediatamente e não executará o resto da função, tornando seguro no resto
‫da função usar a física lidar como desejamos.
‫Então nós vamos fazer isso.
‫Nós vamos descer para onde temos um sucesso.
‫Acho que não precisamos mais dessas mensagens de log.
‫Então, vou remover as instruções alt.
‫Vou remover basicamente tudo do corpo da instrução F, e vamos usar nosso
‫grabber.
‫Então, vamos fazer a física lidar com os componentes de captura de seta no local com rotação.
‫Então temos que fornecer um componente que estamos tentando pegar.
‫Se você der uma olhada, o que está esperando são seus componentes primitivos.
‫Vamos ver se temos algo do tipo em nosso resultado de acertos.
‫Basta ir até a página de documentação e procurar por seus componentes primitivos e você pode
‫ver que o componente get retornaria o componente primitivo que foi atingido.
‫Perfeito.
‫Isso é exatamente o que precisamos.
‫Então, tivemos que procurar os componentes dot get do resultado do hit e isso nos dará o que
‫queremos para o primeiro argumento.
‫Agora o próximo é um nome F para um arco.
‫Agora, na verdade, não queremos pegar nada por um osso em particular.
‫Este seria o caso se tivéssemos uma malha esquelética, mas não temos.
‫Temos uma malha estática, então usamos apenas name, sublinhado none.
‫E de um modo geral, com nomes F onde estamos falando de ossos, isso sai bastante.
‫Se você não quiser colocar nada, use name, sublinhe none.
‫Agora precisamos do local em que vamos pegá-lo.
‫E já dissemos que analisamos isso.
‫É o ponto de impacto do ponto de resultado do hit e depois a rotação bem, a rotação atual desse componente fará toda
‫a rotação atual do ator, o que você preferir.
‫Assim, o resultado dos acertos obtém componentes.
‫Nós vamos pegar esses resultados.
‫Obtenha a seta de ponto do componente porque é um ponteiro.
‫Obter rotação de componentes como.
‫Então agora ele pode colocar os parênteses de fechamento em uma linha separada e eu colocarei um ponto e vírgula
‫que finaliza a instrução e isso deve ser eficaz em pegar nossos componentes.
‫Agora, a próxima parte do quebra-cabeça está no componente tick, onde queremos usar novamente a alça de física.
‫Então, vou copiar o código por enquanto, sabendo que copiar código para três lugares é um pouco
‫demais, e podemos pensar em colocá-lo em uma função para que possamos reutilizar isso.
‫Mas os componentes de admissão usarão uma alça de física.
‫Vamos voltar mais cedo se não conseguirmos uma alça de física.
‫E então o que vamos fazer é tentar definir esses locais de destino.
‫Eu vou fazer uma alça de física, conjunto de setas, localização do alvo e rotação.
‫E vamos pensar um pouco sobre isso.
‫Que tipo de local de destino podemos estar interessados em definir?
‫Bem, essencialmente, será o mesmo que fizemos com o ponto final.
‫Nós vamos pegar nossa localização atual, então movê-la para fora na direção para frente por uma certa
‫distância.
‫Agora, isso será configurável.
‫Você poderia usar a distância máxima de captura, mas acho que na prática isso parece muito distante.
‫Então, se formos ao nosso Grandpa Dot H, vamos criar uma nova propriedade chamada Edit Anywhere.
‫E vai ser um float chamado distância de espera.
‫E eu vou definir isso para 200.
‫Então vai ficar muito mais perto do jogador.
‫Agora, se vamos pegar um CP, podemos entrar em nossa função take e tentar criar este alvo.
‫A localização tem que ser um vetor F chamado localização alvo.
‫Vamos definir isso igual ao get a localização do componente mais o vetor get forward multiplicado pela
‫distância de espera.
‫Então, podemos usar isso como o local de destino.
‫Esse será nosso primeiro argumento e então precisamos da rotação de destino.
‫Bem, para isso, vou usar a rotação do componente atual para que, ao olharmos ao redor,
‫gire o objeto com nossa visão para que possamos apenas fazer a rotação do componente get para obter a rotação
‫de o componente de cena de captura atual.
‫Nice coloque ponto e vírgula no final dessa linha e recompile e veja como isso funciona.
‫Agora, depois de compilarmos com sucesso, vamos selecionar a gárgula e garantir que alteramos sua
‫mobilidade de START.
‫Pense em móvel porque precisamos que ele seja capaz de se mover em resposta à física e vamos ter certeza de que
‫está simulando a física.
‫Vamos para a categoria física e verifique o botão simular física.
‫Vamos apertar o play e tentar pegá-lo.
‫Então nada está acontecendo no momento, mas parece estar preso dentro do chão, então isso não é o
‫ideal.
‫Vamos tentar levantá-lo um pouco para que não fique preso no chão.
‫Deixe-o cair no chão assim e agora tente pegá-lo.
‫Isso parece ter ficado preso no chão novamente.
‫Então vamos tentar uma segunda vez.
‫OK.
‫Portanto, não é um pouco confiável e, às vezes, se você o pega imediatamente, ele pega
‫a gárgula muito bem e você pode pegá-lo assim.
‫Estou percebendo que a rotação não está correta, e isso ocorre porque usei a coisa errada ao pegar o componente
‫de física.
‫Consegui a rotação da gárgula e agora estamos tentando manter a rotação que eu realmente precisava
‫usar era a rotação que estamos usando para tirar a rotação do grabber.
‫Então vamos em frente e mudar isso e recompilar e vamos apertar play novamente e tentar pegá-lo.
‫Ai está.
‫Desta vez eu peguei e consegui a rotação correta, a rotação exata que tinha.
‫E você pode ver que parece que está sendo agarrado por uma mola.
‫Se eu tentar empurrá-lo através de uma parede, ele tentará não atravessar a parede o máximo que puder.
‫Ele eventualmente atravessa a parede, mas está tentando observar a física enquanto eu o movo.
‫Então, vamos desafiá-lo agora a usar uma nova função chamada obter um identificador de física.
‫Vai ser privado.
‫Deve retornar um U.
‫Componente manipulador de física, e deve remover esse código duplicado de precisar obter o proprietário e
‫encontrar o componente por classe.
‫Você também pode fazer com que ele potencialmente entre em contato, veja se consegue e faça logar.
‫Se não tivermos um componente de manipulação física, dê um log de aviso para que ele apareça e saibamos que
‫fizemos algo errado.
‫Pause o vídeo e vá em frente.
‫OK.
‫Bem vindo de volta.
‫Em primeiro lugar, vamos para o início do arquivo onde vamos colocar isso na seção privada.
‫Mas abaixo das propriedades, vou fazer com que ele retorne algumas físicas, manipule componentes e coloque um asterisco
‫aqui.
‫Agora, como estamos usando esse tipo aqui no cabeçalho, precisamos realmente pegar nosso include e cortá-lo
‫do grabber.
‫Então, o incluído em relação ao identificador de física, precisamos colocá-lo no ponto de captura h
‫onde vamos colocá-lo acima do h gerado.
‫Essa é a última coisa sempre em nossa cabeça de arquivos.
‫E por que não precisamos tê-lo também no CP?
‫Bem, porque estamos incluindo Grab ou H, então qualquer coisa que colocarmos, pegue ou H
‫estará automaticamente no CP para que possamos colocar isso incluído lá.
‫Agora podemos ir até onde estamos definindo esta função e chamá-la de poder de manipulação de física de
‫parênteses assim.
‫E acho que isso deve ser constante, não deve mudar nada no nosso grabber para chamar essa função.
‫Basta ir até o CP, ir para a parte inferior onde vou colar na definição, vou
‫colocar dois pontos na frente e depois estou removendo o ponto e vírgula, adicionando um par de chaves.
‫E o que queremos fazer é pegar onde temos isso e vamos cortá-lo e
‫substituí-lo por uma física.
‫Manuseie como sabão.
‫E, em seguida, no identificador de obter física, podemos simplesmente retornar o componente de localização do proprietário de obtenção por classe, etc.
‫E agora podemos substituir isso também onde estamos fazendo isso no componente tic, estamos pegando a alça de
‫física.
‫Vamos substituir esse pouco de código por um identificador de física.
‫Agora é um pedaço de código tão pequeno, quase não vale a pena, mas definitivamente vale
‫a pena para a prática neste ponto e pelo fato de que podemos adicionar algumas mensagens de log agora e começar a jogar.
‫Na verdade, não precisamos lidar com a física, então vou remover esse código de lá.
‫Mas o que vou fazer é adicionar uma mensagem de log.
‫Então vamos criar uma variável para armazenar nosso resultado aqui, porque se retornarmos e depois tentarmos imprimir uma mensagem
‫de log, não vai funcionar.
‫Então, teremos um novo componente de manipulação de física chamado resultado.
‫É assim que vamos sair daqui e diremos que se o resultado for igual a ponteiro nulo, bem, então precisamos
‫de um novo log com um aviso ou na verdade um erro.
‫E vamos dizer que o grabber requer um novo componente de alça de física.
‫E depois da instrução if.
‫Então isso vai acontecer.
‫Seja ou não nulo, vamos retornar o resultado.
‫Então vamos em frente e compilar isso e verificar se tudo funciona.
‫Parece ter tido sucesso e posso ver que deve estar funcionando porque quando eu cliquei com o botão esquerdo na cena eu estou
‫recebendo os orbes azuis ou de depuração sendo desenhados e eles não seriam desenhados se não estivéssemos pegando isso.
‫Componentes do punho da física.
‫Coisas boas.
‫Então, nesta palestra, conseguimos pegar nossa estátua de gárgula usando nosso grabber, embora às vezes possa
‫ser um pouco pouco confiável.
‫E vamos resolver isso nas próximas palestras, então nos vemos lá.