‫Olá.
‫Bem-vindo.
‫Nesta palestra, vamos tornar o grabber muito mais confiável.
‫E também tornaremos possível descartar um componente capturado para que possamos jogá-lo e geralmente
‫torná-lo um pouco mais útil.
‫Vamos mergulhar e ver como isso é feito.
‫Agora, a razão pela qual muitas vezes não conseguimos pegar essa gárgula é que os
‫componentes que estão simulando a física por causa do desempenho vão dormir quando estiverem parados por um certo período de tempo.
‫E é isso que estamos vendo.
‫Esta simulação de física de gárgulas vai dormir e não está sendo acordada quando anexamos a ela
‫com nossa alça de física.
‫Então, o que precisamos aprender a fazer é acordá-lo quando o atingirmos com um traço esférico.
‫Agora vamos dar uma olhada na documentação do seu componente primitivo que vimos.
‫O componente primitivo you é a coisa retornada pelo nosso resultado de acerto, mas o que na verdade é um
‫componente primitivo.
‫Então diz aqui na documentação que um componente primitivo é um componente de cena que contém ou
‫gera algum tipo de geometria e é renderizado ou usado como dados de colisão.
‫De modo geral, os componentes primitivos são aqueles que podem simular a física.
‫Portanto, podemos esperar encontrar alguns métodos de simulação de física aqui.
‫E o que vou procurar é uma função com a palavra-chave wake nela.
‫Vamos examinar algumas funções até encontrarmos uma que diga Acordar todos os corpos rígidos.
‫Corpos rígidos são essencialmente um termo físico para objetos que simulam física.
‫Então você pode ver que tem um vazio.
‫O tipo de retorno não recebe argumentos.
‫Portanto, devemos ser capazes de chamar isso quando estamos tentando anexá-lo.
‫Então, se formos pegar um CP dentro de nossa instrução if, atingimos esse componente, estamos prestes a
‫pegá-lo.
‫A primeira coisa que precisamos fazer é criar uma variável para armazenar esse seu componente primitivo.
‫Então, teremos um ponteiro de componente primitivo chamado componente hit definido igual ao componente dot get do
‫resultado do hit.
‫E então, usando esse ponteiro de componente de acerto, podemos ativar todos os corpos rígidos e colocar os parênteses e o ponto
‫e vírgula no final.
‫Então, isso deve dar um chute nesse componente, acordá-lo para que ele responda à alça de física.
‫Agora vamos substituir onde fizemos resultados de acertos.
‫Não pegue componentes em nossa chamada de identificador de física para pegar a localização do componente porque agora temos uma variável para
‫isso e vamos recompilar quando isso for feito.
‫Vamos em frente e aperte o play e deixe a gárgula sentar um pouco no chão por enquanto e
‫deixe-a dormir e então tente pegá-la.
‫E você notará que não temos problemas em pegá-lo, deixá-lo no chão, seja o que for.
‫Vai ficar tudo bem e acordar aqueles corpos rígidos da física e começar a simulá-los para que possam ser
‫levantados e agarrados.
‫Agora, você deve ter notado que atualmente não podemos liberar a
‫alça física, então esse será seu desafio fazer isso na função de liberação.
‫Então você vai chamar o componente de lançamento nesse identificador de física.
‫Essa é uma função que está disponível no ponteiro do identificador de física.
‫Você vai verificar primeiro se temos um componente get grab.
‫Portanto, se você obtiver um componente de captura que retorne um ponteiro para o componente de captura, esses pontos serão nulos
‫se a alça de física não estiver capturando nada no momento.
‫Então você pode usar isso para verificar se temos alguma coisa e só liberar se estivermos pegando alguma coisa no
‫momento.
‫E como bônus, você pode tentar ver se podemos definir a meta novamente.
‫Só se estivermos pegando alguma coisa, mas assista ao vídeo e tente.
‫Bem vindo de volta.
‫Então vamos entrar para pegar um copo.
‫Indo para a função de liberação e remova o log de liberação.
‫E aqui vamos colocar uma declaração if e vamos dizer se e agora precisamos pegar
‫nossas alças de física.
‫Então, vamos, em primeiro lugar, fazer um ponteiro de componente do seu handle de física, que vamos
‫chamar de handle de física e igualar para obter handle de física.
‫Então, vamos dizer que se o handle de física for igual ao ponteiro nulo, queremos ir em frente e retornar
‫porque não poderemos fazer nada, liberar nada.
‫Se não tivermos uma alça de física, queremos verificar se estamos segurando alguma coisa com nossa
‫alça de física.
‫Então, se, digamos, se a seta do identificador de física for agarrada, os parênteses do componente não são iguais ao ponteiro nulo, então dentro do corpo
‫desta instrução if significa que temos algo atualmente agarrado, bem, então vamos fazer
‫um componente de liberação da seta do identificador de física , que vai deixá-lo ir, como o nome
‫sugere.
‫E uma coisa que eu não fiz no código aqui, mas provavelmente vale a pena adicionar ao seu, é
‫que antes de lançarmos o componente, vale a pena ir em frente e chamar componentes get grabados e então adicionar os
‫corpos rígidos fracos como fizemos antes de pegarmos o componente.
‫Porque se crescermos um componente e não nos movimentarmos por um tempo, ele também pode adormecer.
‫E assim liberá-lo não faria nada.
‫Portanto, vale a pena adicionar, pois pegaria esse caso de canto e não queremos definir o local de destino em
‫tick se tivermos uma alça de física que não está capturando nada no momento.
‫Então, aqui em nossos componentes tick, vamos colocar uma instrução if que será exatamente a mesma.
‫Vai dizer que a seta do punho da física é pega no componente não igual ao ponteiro nulo.
‫Então, no corpo da instrução if, vamos colocar o cálculo da localização do alvo e a configuração do
‫local do alvo nessa alça de física também.
‫Vamos recompilar e experimentar isso.
‫Vamos em frente e aperte o play.
‫E tente pegar a gárgula.
‫E então, se eu soltar o mouse, ele cai no chão novamente.
‫Então, e parece não ser afetado por estar acordado ou dormindo.
‫Parece que estamos acordando, não importa se estamos cada vez que estamos pegando, essencialmente.
‫Então, isso parece estar funcionando exatamente como eu gostaria.
‫Não está travando.
‫Está se sentindo quase certo.
‫A única coisa um pouco estranha é que quando eu me movo para ele, você pode ver que ele faz esse
‫tremor estranho porque está realmente colidindo com o jogador.
‫Agora podemos corrigir isso um pouco indo para nossa gárgula no painel de detalhes, selecionando a categoria all,
‫rolando para baixo até colisão e olhando para nossa predefinição de colisão personalizada e para baixo nas
‫respostas do objeto.
‫Veremos um pouco mais sobre isso mais adiante.
‫Há uma resposta de objeto de peão.
‫Isso basicamente diz: Devo colidir com o peão ou o quê?
‫Qual deve ser minha resposta ao peão?
‫Bem, vou colocá-lo para se sobrepor ao peão.
‫E isso significa que, se colidir comigo, essencialmente simplesmente a ignora.
‫E então mais uma coisa que temos que fazer é porque isso é na verdade composto de duas malhas estáticas,
‫elas têm suas próprias configurações de colisão.
‫Vou descer ao monte de terra.
‫Essa é a coisa debaixo da gárgula.
‫E aqui eu vou apenas simplificar as coisas.
‫Vou fazer a parte do monte de terra, não tem colisão.
‫Então, vou mudar para a predefinição sem colisão.
‫Então eu vou em frente e aperte o play, pegue a gárgula do chão.
‫E agora você pode ver quando estou correndo com ele, não há
‫nenhuma falha estranha porque não está tentando colidir com a malha de colisão do jogador.
‫Coisas boas.
‫Nesta palestra aprendemos como tornar nosso grab muito mais confiável e também como podemos liberar o
‫componente de grabbing.
‫Coisas boas.
‫Vejo você na próxima palestra.