‫Olá e bem-vindo.
‫Nesta palestra, adicionaremos um novo componente ao app player, o handle
‫de física, e aprenderemos como podemos obter um ponteiro para ele em nosso componente grabber.
‫Também veremos como podemos nos proteger de bater acidentalmente no motor.
‫Vamos mergulhar e ver como.
‫Agora, para agarrar um objeto, precisamos interagir com o sistema físico.
‫E na verdade existe um componente que podemos usar chamado alça física, que nos permite pegar objetos físicos e dizer
‫a eles onde queremos estar no mundo, mas fazê-lo de forma que reconheça as restrições físicas
‫para que não t atravessar paredes.
‫E parece que o objeto está em uma mola, em vez de seguir rigidamente um ponto específico para o qual
‫dizemos para ele ir.
‫Então, vamos usar esses componentes de manipulação de física.
‫Vamos adicioná-lo ao nosso player, BP, junto com o grabber.
‫Então, vamos para o botão adicionar no painel de componentes e procure o identificador de física e adicione.
‫E você pode ver que é um componente de ator, não um componente de cena, porque
‫ele desce na seção inferior, então na verdade não tem uma transformação física própria.
‫O que fazemos com a alça física é dizer a ela o objeto para pegar e depois dizer onde queremos
‫que ela coloque o objeto que pegamos.
‫Se você for para a documentação, poderá ver isso nas funções disponíveis.
‫Se você rolar para baixo até a seção de função, poderá ver que há um componente de liberação e um componente de
‫captura na função de localização.
‫Há também um local de destino definido e rotação.
‫É aqui que ele quer tentar colocar o objeto, mas obviamente ele respeitará quaisquer restrições físicas
‫ao fazê-lo e o fará de maneira suave como se estivesse em uma mola.
‫Agora, não vamos usar essas funções ainda, mas precisamos encontrar uma maneira de obter
‫esse componente em nosso componente grabber.
‫Então, como fazemos isso?
‫Bem, vamos para o nosso pegar um C. P e dê uma olhada em um grande jogo e tente pegá-lo.
‫Agora existe uma função em qualquer ator que nos permite encontrar um componente por seu tipo.
‫Mas qual é o tipo de alça física?
‫Bem, é um componente de manipulação de física que se apossa desse tipo que precisamos usar e incluir e você pode ver
‫que a inclusão na documentação é o componente de manipulação de física do mecanismo de física.
‫Então, vamos copiar isso para um CP de captura e aditivo em adicionar auxiliares de depuração de desenho.
‫Então o que vamos fazer é fazer um get ONA para se apossar do nosso
‫ato de possuir, um ponteiro para uma seta e um componente legal de encontrar por classe.
‫Agora, essa função é um tipo especial de função chamada função de modelo em C++, e
‫isso significa que você pode passar alguns parâmetros que realmente são avaliados quando você compila.
‫E a maneira como você faz isso é usando colchetes angulares como este.
‫Então você usa um colchete angular após a função e dá a ela o tipo que você
‫quer que ela encontre, que no nosso caso é o componente de manipulação física assim.
‫E então você fecha os colchetes.
‫Mas porque é uma função, você precisa chamá-la usando parênteses regulares também.
‫Então você coloca o segundo conjunto de parênteses depois disso.
‫Assim, você pode ver que esses argumentos de tempo de compilação são passados usando os colchetes angulares e, em seguida,
‫os de tempo de execução são passados usando os parênteses.
‫Agora, como uma função normal, isso terá um valor de retorno e, neste caso, o valor de retorno
‫será qualquer tipo que passamos aqui.
‫Mas como um ponteiro, então podemos pegar um ponteiro de componente do seu handle de física e criar uma
‫variável para aquilo que vamos chamar de handle de física e defini-la igual a este get owner find componente por classe.
‫Agora vamos lembrar de um ponto e vírgula no final desta linha e isso é tudo o que
‫é necessário para que possamos obter outro componente em nosso mesmo ator.
‫Agora lembre-se que eu lhe disse que os ponteiros podem ser perigosos porque às vezes eles podem ser nulos e isso
‫pode levar a uma falha.
‫Então imagine que esquecemos de colocar um componente de alça física em nosso ator, ou colocamos um grabber em um novo ator
‫e ainda não o conectamos a um componente de alça física.
‫Se este for o caso, então o ponteiro do identificador de física será um ponteiro nulo.
‫E se tentarmos usar o operador de seta ou o operador de referência nesse ponteiro, ele travará
‫nosso mecanismo.
‫E às vezes pode ser muito difícil ver como é esse acidente.
‫Então, vou seguir em frente e causar esse travamento apenas para mostrar a você e você poderá reconhecê-lo
‫se isso acontecer com você no futuro, vou reatribuir nosso ponteiro de identificador de física
‫igual ao ponteiro nulo .
‫Palavra-chave especial.
‫É tudo.
‫Não, Pedro.
‫É assim que você escreve ponteiro NULL em C++.
‫Então você coloca um ponto e vírgula no final.
‫E então o que podemos fazer é fazer física, lidar com flechas, obter nomes assim.
‫E se formos em frente e compilar usando codificação ao vivo e quando terminar de compilar, vamos em
‫frente e certifique-se, em primeiro lugar, de salvar tudo o que temos aqui acontecendo no IBP plex e prestes
‫a travar o motor.
‫E se eu for em frente e apertar o play, esse é o resultado que teremos um acidente.
‫Repórter E você pode ficar tentado a pensar quando vir isso que algo deu errado com o irreal, mas na
‫verdade é o seu código que está com defeito aqui.
‫Você pode ver que neste relatório de travamento, a primeira linha diz que o problema está vindo de você pegar dois pontos,
‫dois pontos, começar a jogar.
‫E também está nos dando o número da linha, que é a linha 28.
‫Então você pode ver que neste ponto na linha 28, quando fazemos referência a esse ponteiro,
‫para chamar uma função nele, na verdade cometemos um erro grave ao não verificar primeiro se esse ponteiro era
‫nulo.
‫Então é isso que precisamos fazer.
‫E fazemos isso com uma instrução if.
‫Nós basicamente dizemos que se o handle de física não é igual ao ponteiro nulo, então podemos ir em frente e chamar coisas nesse handle de física para que possamos colocar o handle
‫de física, obter o nome dentro desta declaração if e isso nos protege porque esse código,
‫que o o código de referência não será executado no caso de termos um
‫ponteiro nulo.
‫Então, vou remover a linha 27 agora, onde estamos definindo-a como um ponteiro sem e vou
‫desafiá-lo a imprimir o nome do componente para si mesmo.
‫Então só imprima se tivermos o componente real, basicamente não temos um ponteiro nulo e usamos um else para avisar
‫se não conseguimos pegar esse componente e tentar remover o componente para verificar, pausar o
‫vídeo e ter atrás.
‫OK.
‫Bem vindo de volta.
‫Então, vamos criar uma nova mensagem de log aqui e vamos dizer tem um identificador de física, dois pontos percent s e
‫temos esse nome de identificador de física.
‫Então, vou recortar e colar como segundo ou quarto argumentos no log U.
‫E vou colocar uma estrela porque é um barbante.
‫Agora vamos adicionar uma instrução alt em nossas instruções if.
‫E aqui vamos colocar outro registro de ano, que será desta vez em
‫vez de um display, vamos colocar uma mensagem do tipo de aviso que aparecerá em amarelo e
‫vamos dizer não identificador de física encontrado, ponto de exclamação.
‫Agora, não tenho o editor aberto.
‫Então, vou fazer uma mudança de controle B para compilar dentro do código do Visual Studio, fechar o terminal quando
‫for bem-sucedido e reiniciar a partir do novo projeto.
‫Uma vez iniciado, vamos em frente e aperte play, abra o log de saída e devemos ver a mensagem de
‫log.
‫A tem uma alça de física.
‫Qual nome o nome é familiar lidar com física.
‫Agora, e se fôssemos até o nosso reprodutor de bipe e realmente removesse, exclua esse identificador de física e vá em
‫frente e jogue.
‫Agora dê uma olhada no nosso log de saída e eles vão, temos um aviso amarelo de que nenhum identificador de física
‫foi encontrado.
‫Então vamos parar de jogar.
‫Vamos em frente e adicionar o identificador de física de volta porque vamos querê-lo e salvaremos o jogador.
‫BP Ótimo material.
‫Então descobrimos como podemos obter outros componentes de dentro de um componente e aprendemos como lidar
‫com um nulo.
‫Um ponto é e por que precisamos ter cuidado.
‫Vejo você na próxima palestra.