﻿1
00:00:04,420 --> 00:00:05,380
‫Olá e bem-vindo.

2
00:00:05,380 --> 00:00:10,030
‫Nesta palestra, adicionaremos um novo componente ao app player, o handle

3
00:00:10,030 --> 00:00:16,030
‫de física, e aprenderemos como podemos obter um ponteiro para ele em nosso componente grabber.

4
00:00:16,030 --> 00:00:20,620
‫Também veremos como podemos nos proteger de bater acidentalmente no motor.

5
00:00:20,830 --> 00:00:23,140
‫Vamos mergulhar e ver como.

6
00:00:24,280 --> 00:00:29,170
‫Agora, para agarrar um objeto, precisamos interagir com o sistema físico.

7
00:00:29,500 --> 00:00:37,030
‫E na verdade existe um componente que podemos usar chamado alça física, que nos permite pegar objetos físicos e dizer

8
00:00:37,030 --> 00:00:43,030
‫a eles onde queremos estar no mundo, mas fazê-lo de forma que reconheça as restrições físicas

9
00:00:43,030 --> 00:00:45,530
‫para que não t atravessar paredes.

10
00:00:46,120 --> 00:00:53,170
‫E parece que o objeto está em uma mola, em vez de seguir rigidamente um ponto específico para o qual

11
00:00:53,170 --> 00:00:54,640
‫dizemos para ele ir.

12
00:00:55,150 --> 00:00:57,850
‫Então, vamos usar esses componentes de manipulação de física.

13
00:00:57,850 --> 00:01:02,200
‫Vamos adicioná-lo ao nosso player, BP, junto com o grabber.

14
00:01:02,200 --> 00:01:09,550
‫Então, vamos para o botão adicionar no painel de componentes e procure o identificador de física e adicione.

15
00:01:09,910 --> 00:01:14,110
‫E você pode ver que é um componente de ator, não um componente de cena, porque

16
00:01:14,320 --> 00:01:18,220
‫ele desce na seção inferior, então na verdade não tem uma transformação física própria.

17
00:01:18,610 --> 00:01:23,770
‫O que fazemos com a alça física é dizer a ela o objeto para pegar e depois dizer onde queremos

18
00:01:23,770 --> 00:01:25,900
‫que ela coloque o objeto que pegamos.

19
00:01:26,230 --> 00:01:31,810
‫Se você for para a documentação, poderá ver isso nas funções disponíveis.

20
00:01:31,990 --> 00:01:39,370
‫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

21
00:01:39,370 --> 00:01:41,110
‫captura na função de localização.

22
00:01:41,440 --> 00:01:45,910
‫Há também um local de destino definido e rotação.

23
00:01:45,910 --> 00:01:51,100
‫É aqui que ele quer tentar colocar o objeto, mas obviamente ele respeitará quaisquer restrições físicas

24
00:01:51,100 --> 00:01:56,260
‫ao fazê-lo e o fará de maneira suave como se estivesse em uma mola.

25
00:01:56,500 --> 00:02:02,380
‫Agora, não vamos usar essas funções ainda, mas precisamos encontrar uma maneira de obter

26
00:02:02,380 --> 00:02:05,230
‫esse componente em nosso componente grabber.

27
00:02:05,710 --> 00:02:07,540
‫Então, como fazemos isso?

28
00:02:07,840 --> 00:02:15,260
‫Bem, vamos para o nosso pegar um C. P e dê uma olhada em um grande jogo e tente pegá-lo.

29
00:02:15,280 --> 00:02:23,740
‫Agora existe uma função em qualquer ator que nos permite encontrar um componente por seu tipo.

30
00:02:24,100 --> 00:02:27,110
‫Mas qual é o tipo de alça física?

31
00:02:27,130 --> 00:02:34,450
‫Bem, é um componente de manipulação de física que se apossa desse tipo que precisamos usar e incluir e você pode ver

32
00:02:34,450 --> 00:02:40,090
‫que a inclusão na documentação é o componente de manipulação de física do mecanismo de física.

33
00:02:40,090 --> 00:02:46,150
‫Então, vamos copiar isso para um CP de captura e aditivo em adicionar auxiliares de depuração de desenho.

34
00:02:46,900 --> 00:02:53,260
‫Então o que vamos fazer é fazer um get ONA para se apossar do nosso

35
00:02:53,680 --> 00:03:00,070
‫ato de possuir, um ponteiro para uma seta e um componente legal de encontrar por classe.

36
00:03:00,400 --> 00:03:07,510
‫Agora, essa função é um tipo especial de função chamada função de modelo em C++, e

37
00:03:07,510 --> 00:03:14,230
‫isso significa que você pode passar alguns parâmetros que realmente são avaliados quando você compila.

38
00:03:14,470 --> 00:03:18,790
‫E a maneira como você faz isso é usando colchetes angulares como este.

39
00:03:19,240 --> 00:03:25,270
‫Então você usa um colchete angular após a função e dá a ela o tipo que você

40
00:03:25,270 --> 00:03:30,640
‫quer que ela encontre, que no nosso caso é o componente de manipulação física assim.

41
00:03:31,090 --> 00:03:33,220
‫E então você fecha os colchetes.

42
00:03:33,220 --> 00:03:37,630
‫Mas porque é uma função, você precisa chamá-la usando parênteses regulares também.

43
00:03:37,630 --> 00:03:41,680
‫Então você coloca o segundo conjunto de parênteses depois disso.

44
00:03:41,680 --> 00:03:48,580
‫Assim, você pode ver que esses argumentos de tempo de compilação são passados usando os colchetes angulares e, em seguida,

45
00:03:48,580 --> 00:03:52,090
‫os de tempo de execução são passados usando os parênteses.

46
00:03:52,690 --> 00:03:58,840
‫Agora, como uma função normal, isso terá um valor de retorno e, neste caso, o valor de retorno

47
00:03:58,840 --> 00:04:01,270
‫será qualquer tipo que passamos aqui.

48
00:04:01,420 --> 00:04:08,650
‫Mas como um ponteiro, então podemos pegar um ponteiro de componente do seu handle de física e criar uma

49
00:04:08,650 --> 00:04:16,150
‫variável para aquilo que vamos chamar de handle de física e defini-la igual a este get owner find componente por classe.

50
00:04:16,510 --> 00:04:21,850
‫Agora vamos lembrar de um ponto e vírgula no final desta linha e isso é tudo o que

51
00:04:21,850 --> 00:04:25,930
‫é necessário para que possamos obter outro componente em nosso mesmo ator.

52
00:04:26,170 --> 00:04:32,680
‫Agora lembre-se que eu lhe disse que os ponteiros podem ser perigosos porque às vezes eles podem ser nulos e isso

53
00:04:32,680 --> 00:04:34,510
‫pode levar a uma falha.

54
00:04:34,840 --> 00:04:42,040
‫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

55
00:04:42,040 --> 00:04:46,000
‫e ainda não o conectamos a um componente de alça física.

56
00:04:46,180 --> 00:04:52,360
‫Se este for o caso, então o ponteiro do identificador de física será um ponteiro nulo.

57
00:04:52,540 --> 00:04:58,540
‫E se tentarmos usar o operador de seta ou o operador de referência nesse ponteiro, ele travará

58
00:04:58,540 --> 00:04:59,530
‫nosso mecanismo.

59
00:04:59,530 --> 00:05:03,070
‫E às vezes pode ser muito difícil ver como é esse acidente.

60
00:05:03,490 --> 00:05:09,940
‫Então, vou seguir em frente e causar esse travamento apenas para mostrar a você e você poderá reconhecê-lo

61
00:05:09,940 --> 00:05:15,640
‫se isso acontecer com você no futuro, vou reatribuir nosso ponteiro de identificador de física

62
00:05:15,640 --> 00:05:17,740
‫igual ao ponteiro nulo .

63
00:05:18,970 --> 00:05:20,230
‫Palavra-chave especial.

64
00:05:20,290 --> 00:05:20,680
‫É tudo.

65
00:05:21,100 --> 00:05:22,360
‫Não, Pedro.

66
00:05:22,420 --> 00:05:24,520
‫É assim que você escreve ponteiro NULL em C++.

67
00:05:24,520 --> 00:05:25,780
‫Então você coloca um ponto e vírgula no final.

68
00:05:26,140 --> 00:05:32,170
‫E então o que podemos fazer é fazer física, lidar com flechas, obter nomes assim.

69
00:05:32,710 --> 00:05:38,140
‫E se formos em frente e compilar usando codificação ao vivo e quando terminar de compilar, vamos em

70
00:05:38,140 --> 00:05:43,960
‫frente e certifique-se, em primeiro lugar, de salvar tudo o que temos aqui acontecendo no IBP plex e prestes

71
00:05:43,960 --> 00:05:45,520
‫a travar o motor.

72
00:05:45,880 --> 00:05:50,080
‫E se eu for em frente e apertar o play, esse é o resultado que teremos um acidente.

73
00:05:50,080 --> 00:05:55,360
‫Repórter E você pode ficar tentado a pensar quando vir isso que algo deu errado com o irreal, mas na

74
00:05:55,360 --> 00:05:58,210
‫verdade é o seu código que está com defeito aqui.

75
00:05:58,540 --> 00:06:06,190
‫Você pode ver que neste relatório de travamento, a primeira linha diz que o problema está vindo de você pegar dois pontos,

76
00:06:06,220 --> 00:06:08,170
‫dois pontos, começar a jogar.

77
00:06:08,170 --> 00:06:11,440
‫E também está nos dando o número da linha, que é a linha 28.

78
00:06:11,890 --> 00:06:18,370
‫Então você pode ver que neste ponto na linha 28, quando fazemos referência a esse ponteiro,

79
00:06:18,370 --> 00:06:26,020
‫para chamar uma função nele, na verdade cometemos um erro grave ao não verificar primeiro se esse ponteiro era

80
00:06:26,020 --> 00:06:26,560
‫nulo.

81
00:06:27,010 --> 00:06:28,300
‫Então é isso que precisamos fazer.

82
00:06:28,300 --> 00:06:29,650
‫E fazemos isso com uma instrução if.

83
00:06:29,650 --> 00:06:41,350
‫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

84
00:06:41,350 --> 00:06:47,080
‫de física, obter o nome dentro desta declaração if e isso nos protege porque esse código,

85
00:06:47,080 --> 00:06:52,270
‫que o o código de referência não será executado no caso de termos um

86
00:06:52,270 --> 00:06:53,200
‫ponteiro nulo.

87
00:06:53,470 --> 00:06:58,780
‫Então, vou remover a linha 27 agora, onde estamos definindo-a como um ponteiro sem e vou

88
00:06:58,780 --> 00:07:02,410
‫desafiá-lo a imprimir o nome do componente para si mesmo.

89
00:07:02,860 --> 00:07:10,900
‫Então só imprima se tivermos o componente real, basicamente não temos um ponteiro nulo e usamos um else para avisar

90
00:07:10,900 --> 00:07:16,990
‫se não conseguimos pegar esse componente e tentar remover o componente para verificar, pausar o

91
00:07:17,290 --> 00:07:18,940
‫vídeo e ter atrás.

92
00:07:22,230 --> 00:07:22,710
‫OK.

93
00:07:22,710 --> 00:07:23,550
‫Bem vindo de volta.

94
00:07:23,640 --> 00:07:33,360
‫Então, vamos criar uma nova mensagem de log aqui e vamos dizer tem um identificador de física, dois pontos percent s e

95
00:07:33,660 --> 00:07:37,110
‫temos esse nome de identificador de física.

96
00:07:37,140 --> 00:07:42,990
‫Então, vou recortar e colar como segundo ou quarto argumentos no log U.

97
00:07:43,470 --> 00:07:46,770
‫E vou colocar uma estrela porque é um barbante.

98
00:07:47,010 --> 00:07:49,980
‫Agora vamos adicionar uma instrução alt em nossas instruções if.

99
00:07:50,310 --> 00:07:55,470
‫E aqui vamos colocar outro registro de ano, que será desta vez em

100
00:07:55,470 --> 00:08:02,040
‫vez de um display, vamos colocar uma mensagem do tipo de aviso que aparecerá em amarelo e

101
00:08:02,700 --> 00:08:07,200
‫vamos dizer não identificador de física encontrado, ponto de exclamação.

102
00:08:07,410 --> 00:08:08,880
‫Agora, não tenho o editor aberto.

103
00:08:08,880 --> 00:08:14,760
‫Então, vou fazer uma mudança de controle B para compilar dentro do código do Visual Studio, fechar o terminal quando

104
00:08:14,760 --> 00:08:17,700
‫for bem-sucedido e reiniciar a partir do novo projeto.

105
00:08:17,760 --> 00:08:24,930
‫Uma vez iniciado, vamos em frente e aperte play, abra o log de saída e devemos ver a mensagem de

106
00:08:24,930 --> 00:08:25,330
‫log.

107
00:08:25,330 --> 00:08:26,970
‫A tem uma alça de física.

108
00:08:26,970 --> 00:08:29,550
‫Qual nome o nome é familiar lidar com física.

109
00:08:30,060 --> 00:08:39,450
‫Agora, e se fôssemos até o nosso reprodutor de bipe e realmente removesse, exclua esse identificador de física e vá em

110
00:08:39,450 --> 00:08:41,070
‫frente e jogue.

111
00:08:41,070 --> 00:08:47,880
‫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

112
00:08:47,970 --> 00:08:48,720
‫foi encontrado.

113
00:08:48,840 --> 00:08:49,800
‫Então vamos parar de jogar.

114
00:08:50,070 --> 00:08:55,800
‫Vamos em frente e adicionar o identificador de física de volta porque vamos querê-lo e salvaremos o jogador.

115
00:08:55,800 --> 00:08:57,030
‫BP Ótimo material.

116
00:08:57,030 --> 00:09:03,540
‫Então descobrimos como podemos obter outros componentes de dentro de um componente e aprendemos como lidar

117
00:09:03,540 --> 00:09:05,220
‫com um nulo.

118
00:09:05,220 --> 00:09:08,520
‫Um ponto é e por que precisamos ter cuidado.

119
00:09:08,820 --> 00:09:10,230
‫Vejo você na próxima palestra.

