﻿1
00:00:04,350 --> 00:00:04,760
‫Olá.

2
00:00:04,800 --> 00:00:05,190
‫Bem-vindo.

3
00:00:05,190 --> 00:00:09,750
‫Nesta palestra, vamos tornar o grabber muito mais confiável.

4
00:00:09,750 --> 00:00:16,860
‫E também tornaremos possível descartar um componente capturado para que possamos jogá-lo e geralmente

5
00:00:16,860 --> 00:00:19,890
‫torná-lo um pouco mais útil.

6
00:00:19,920 --> 00:00:21,870
‫Vamos mergulhar e ver como isso é feito.

7
00:00:22,850 --> 00:00:28,430
‫Agora, a razão pela qual muitas vezes não conseguimos pegar essa gárgula é que os

8
00:00:28,430 --> 00:00:35,990
‫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.

9
00:00:35,990 --> 00:00:37,310
‫E é isso que estamos vendo.

10
00:00:37,310 --> 00:00:43,310
‫Esta simulação de física de gárgulas vai dormir e não está sendo acordada quando anexamos a ela

11
00:00:43,310 --> 00:00:45,290
‫com nossa alça de física.

12
00:00:45,290 --> 00:00:51,400
‫Então, o que precisamos aprender a fazer é acordá-lo quando o atingirmos com um traço esférico.

13
00:00:51,410 --> 00:00:56,420
‫Agora vamos dar uma olhada na documentação do seu componente primitivo que vimos.

14
00:00:56,420 --> 00:01:02,420
‫O componente primitivo you é a coisa retornada pelo nosso resultado de acerto, mas o que na verdade é um

15
00:01:02,420 --> 00:01:03,260
‫componente primitivo.

16
00:01:03,440 --> 00:01:10,010
‫Então diz aqui na documentação que um componente primitivo é um componente de cena que contém ou

17
00:01:10,010 --> 00:01:16,160
‫gera algum tipo de geometria e é renderizado ou usado como dados de colisão.

18
00:01:16,160 --> 00:01:21,770
‫De modo geral, os componentes primitivos são aqueles que podem simular a física.

19
00:01:22,130 --> 00:01:27,830
‫Portanto, podemos esperar encontrar alguns métodos de simulação de física aqui.

20
00:01:27,830 --> 00:01:32,030
‫E o que vou procurar é uma função com a palavra-chave wake nela.

21
00:01:32,060 --> 00:01:37,820
‫Vamos examinar algumas funções até encontrarmos uma que diga Acordar todos os corpos rígidos.

22
00:01:38,270 --> 00:01:43,610
‫Corpos rígidos são essencialmente um termo físico para objetos que simulam física.

23
00:01:43,610 --> 00:01:44,780
‫Então você pode ver que tem um vazio.

24
00:01:44,780 --> 00:01:46,700
‫O tipo de retorno não recebe argumentos.

25
00:01:46,700 --> 00:01:52,010
‫Portanto, devemos ser capazes de chamar isso quando estamos tentando anexá-lo.

26
00:01:52,010 --> 00:01:58,220
‫Então, se formos pegar um CP dentro de nossa instrução if, atingimos esse componente, estamos prestes a

27
00:01:58,220 --> 00:01:58,610
‫pegá-lo.

28
00:01:58,610 --> 00:02:04,550
‫A primeira coisa que precisamos fazer é criar uma variável para armazenar esse seu componente primitivo.

29
00:02:04,550 --> 00:02:15,170
‫Então, teremos um ponteiro de componente primitivo chamado componente hit definido igual ao componente dot get do

30
00:02:15,470 --> 00:02:17,990
‫resultado do hit.

31
00:02:18,530 --> 00:02:27,770
‫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

32
00:02:27,770 --> 00:02:29,690
‫e vírgula no final.

33
00:02:29,690 --> 00:02:35,900
‫Então, isso deve dar um chute nesse componente, acordá-lo para que ele responda à alça de física.

34
00:02:35,930 --> 00:02:39,160
‫Agora vamos substituir onde fizemos resultados de acertos.

35
00:02:39,200 --> 00:02:46,400
‫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

36
00:02:46,400 --> 00:02:49,460
‫isso e vamos recompilar quando isso for feito.

37
00:02:49,460 --> 00:02:56,480
‫Vamos em frente e aperte o play e deixe a gárgula sentar um pouco no chão por enquanto e

38
00:02:56,480 --> 00:02:58,910
‫deixe-a dormir e então tente pegá-la.

39
00:02:58,910 --> 00:03:05,120
‫E você notará que não temos problemas em pegá-lo, deixá-lo no chão, seja o que for.

40
00:03:05,120 --> 00:03:12,440
‫Vai ficar tudo bem e acordar aqueles corpos rígidos da física e começar a simulá-los para que possam ser

41
00:03:12,440 --> 00:03:13,910
‫levantados e agarrados.

42
00:03:13,910 --> 00:03:18,560
‫Agora, você deve ter notado que atualmente não podemos liberar a

43
00:03:18,560 --> 00:03:23,300
‫alça física, então esse será seu desafio fazer isso na função de liberação.

44
00:03:23,360 --> 00:03:26,570
‫Então você vai chamar o componente de lançamento nesse identificador de física.

45
00:03:26,570 --> 00:03:29,660
‫Essa é uma função que está disponível no ponteiro do identificador de física.

46
00:03:29,840 --> 00:03:34,910
‫Você vai verificar primeiro se temos um componente get grab.

47
00:03:34,910 --> 00:03:40,040
‫Portanto, se você obtiver um componente de captura que retorne um ponteiro para o componente de captura, esses pontos serão nulos

48
00:03:40,040 --> 00:03:43,010
‫se a alça de física não estiver capturando nada no momento.

49
00:03:43,010 --> 00:03:48,110
‫Então você pode usar isso para verificar se temos alguma coisa e só liberar se estivermos pegando alguma coisa no

50
00:03:48,110 --> 00:03:48,530
‫momento.

51
00:03:48,530 --> 00:03:53,090
‫E como bônus, você pode tentar ver se podemos definir a meta novamente.

52
00:03:53,090 --> 00:03:58,070
‫Só se estivermos pegando alguma coisa, mas assista ao vídeo e tente.

53
00:04:01,590 --> 00:04:02,470
‫Bem vindo de volta.

54
00:04:02,490 --> 00:04:06,090
‫Então vamos entrar para pegar um copo.

55
00:04:06,230 --> 00:04:10,490
‫Indo para a função de liberação e remova o log de liberação.

56
00:04:10,500 --> 00:04:16,650
‫E aqui vamos colocar uma declaração if e vamos dizer se e agora precisamos pegar

57
00:04:16,650 --> 00:04:18,360
‫nossas alças de física.

58
00:04:18,360 --> 00:04:25,650
‫Então, vamos, em primeiro lugar, fazer um ponteiro de componente do seu handle de física, que vamos

59
00:04:25,650 --> 00:04:31,410
‫chamar de handle de física e igualar para obter handle de física.

60
00:04:31,590 --> 00:04:40,770
‫Então, vamos dizer que se o handle de física for igual ao ponteiro nulo, queremos ir em frente e retornar

61
00:04:40,770 --> 00:04:44,400
‫porque não poderemos fazer nada, liberar nada.

62
00:04:44,400 --> 00:04:51,330
‫Se não tivermos uma alça de física, queremos verificar se estamos segurando alguma coisa com nossa

63
00:04:51,330 --> 00:04:52,650
‫alça de física.

64
00:04:52,650 --> 00:05:03,390
‫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

65
00:05:04,080 --> 00:05:09,420
‫desta instrução if significa que temos algo atualmente agarrado, bem, então vamos fazer

66
00:05:09,420 --> 00:05:16,980
‫um componente de liberação da seta do identificador de física , que vai deixá-lo ir, como o nome

67
00:05:16,980 --> 00:05:17,730
‫sugere.

68
00:05:17,730 --> 00:05:24,450
‫E uma coisa que eu não fiz no código aqui, mas provavelmente vale a pena adicionar ao seu, é

69
00:05:24,450 --> 00:05:32,160
‫que antes de lançarmos o componente, vale a pena ir em frente e chamar componentes get grabados e então adicionar os

70
00:05:32,160 --> 00:05:36,180
‫corpos rígidos fracos como fizemos antes de pegarmos o componente.

71
00:05:36,180 --> 00:05:41,520
‫Porque se crescermos um componente e não nos movimentarmos por um tempo, ele também pode adormecer.

72
00:05:41,520 --> 00:05:43,470
‫E assim liberá-lo não faria nada.

73
00:05:43,470 --> 00:05:51,300
‫Portanto, vale a pena adicionar, pois pegaria esse caso de canto e não queremos definir o local de destino em

74
00:05:51,300 --> 00:05:56,790
‫tick se tivermos uma alça de física que não está capturando nada no momento.

75
00:05:56,790 --> 00:06:02,190
‫Então, aqui em nossos componentes tick, vamos colocar uma instrução if que será exatamente a mesma.

76
00:06:02,190 --> 00:06:11,730
‫Vai dizer que a seta do punho da física é pega no componente não igual ao ponteiro nulo.

77
00:06:11,760 --> 00:06:18,810
‫Então, no corpo da instrução if, vamos colocar o cálculo da localização do alvo e a configuração do

78
00:06:18,810 --> 00:06:22,380
‫local do alvo nessa alça de física também.

79
00:06:22,380 --> 00:06:24,330
‫Vamos recompilar e experimentar isso.

80
00:06:24,330 --> 00:06:26,070
‫Vamos em frente e aperte o play.

81
00:06:26,970 --> 00:06:28,920
‫E tente pegar a gárgula.

82
00:06:28,920 --> 00:06:33,420
‫E então, se eu soltar o mouse, ele cai no chão novamente.

83
00:06:33,420 --> 00:06:39,000
‫Então, e parece não ser afetado por estar acordado ou dormindo.

84
00:06:39,000 --> 00:06:43,610
‫Parece que estamos acordando, não importa se estamos cada vez que estamos pegando, essencialmente.

85
00:06:43,620 --> 00:06:46,950
‫Então, isso parece estar funcionando exatamente como eu gostaria.

86
00:06:46,950 --> 00:06:47,910
‫Não está travando.

87
00:06:47,910 --> 00:06:49,950
‫Está se sentindo quase certo.

88
00:06:49,980 --> 00:06:56,520
‫A única coisa um pouco estranha é que quando eu me movo para ele, você pode ver que ele faz esse

89
00:06:56,520 --> 00:06:59,550
‫tremor estranho porque está realmente colidindo com o jogador.

90
00:06:59,550 --> 00:07:06,840
‫Agora podemos corrigir isso um pouco indo para nossa gárgula no painel de detalhes, selecionando a categoria all,

91
00:07:06,840 --> 00:07:13,950
‫rolando para baixo até colisão e olhando para nossa predefinição de colisão personalizada e para baixo nas

92
00:07:13,950 --> 00:07:15,510
‫respostas do objeto.

93
00:07:15,510 --> 00:07:17,760
‫Veremos um pouco mais sobre isso mais adiante.

94
00:07:17,760 --> 00:07:20,910
‫Há uma resposta de objeto de peão.

95
00:07:20,910 --> 00:07:25,650
‫Isso basicamente diz: Devo colidir com o peão ou o quê?

96
00:07:25,680 --> 00:07:27,570
‫Qual deve ser minha resposta ao peão?

97
00:07:27,570 --> 00:07:31,740
‫Bem, vou colocá-lo para se sobrepor ao peão.

98
00:07:31,740 --> 00:07:36,690
‫E isso significa que, se colidir comigo, essencialmente simplesmente a ignora.

99
00:07:36,690 --> 00:07:41,880
‫E então mais uma coisa que temos que fazer é porque isso é na verdade composto de duas malhas estáticas,

100
00:07:41,880 --> 00:07:43,890
‫elas têm suas próprias configurações de colisão.

101
00:07:43,890 --> 00:07:46,320
‫Vou descer ao monte de terra.

102
00:07:46,320 --> 00:07:48,720
‫Essa é a coisa debaixo da gárgula.

103
00:07:49,110 --> 00:07:52,350
‫E aqui eu vou apenas simplificar as coisas.

104
00:07:52,350 --> 00:07:57,480
‫Vou fazer a parte do monte de terra, não tem colisão.

105
00:07:57,490 --> 00:08:00,300
‫Então, vou mudar para a predefinição sem colisão.

106
00:08:00,510 --> 00:08:05,250
‫Então eu vou em frente e aperte o play, pegue a gárgula do chão.

107
00:08:05,250 --> 00:08:09,540
‫E agora você pode ver quando estou correndo com ele, não há

108
00:08:09,540 --> 00:08:14,730
‫nenhuma falha estranha porque não está tentando colidir com a malha de colisão do jogador.

109
00:08:14,760 --> 00:08:15,540
‫Coisas boas.

110
00:08:15,540 --> 00:08:22,170
‫Nesta palestra aprendemos como tornar nosso grab muito mais confiável e também como podemos liberar o

111
00:08:22,170 --> 00:08:23,790
‫componente de grabbing.

112
00:08:23,790 --> 00:08:24,510
‫Coisas boas.

113
00:08:24,510 --> 00:08:26,190
‫Vejo você na próxima palestra.

