﻿1
00:00:04,420 --> 00:00:05,380
‫Hola y bienvenido.

2
00:00:05,380 --> 00:00:10,030
‫En esta lección, agregaremos un nuevo componente al reproductor de

3
00:00:10,030 --> 00:00:16,030
‫aplicaciones, el identificador de física, y aprenderemos cómo podemos apuntarlo en nuestro componente capturador.

4
00:00:16,030 --> 00:00:20,620
‫También vamos a ver cómo podemos protegernos de chocar accidentalmente el motor.

5
00:00:20,830 --> 00:00:23,140
‫Vamos a sumergirnos y ver cómo.

6
00:00:24,280 --> 00:00:29,170
‫Ahora, para agarrar un objeto, necesitamos interactuar con el sistema físico.

7
00:00:29,500 --> 00:00:37,030
‫Y en realidad hay un componente que podemos usar llamado control de física, que nos permite agarrar objetos físicos y decirles dónde

8
00:00:37,030 --> 00:00:43,030
‫queremos estar en el mundo, pero hacerlo de tal manera que reconozca las limitaciones físicas para que

9
00:00:43,030 --> 00:00:45,530
‫no lo haga. t atravesar paredes.

10
00:00:46,120 --> 00:00:53,170
‫Y parece que el objeto está en un resorte en lugar de seguir rígidamente un punto específico al que le

11
00:00:53,170 --> 00:00:54,640
‫decimos que vaya.

12
00:00:55,150 --> 00:00:57,850
‫Así que vamos a usar estos componentes de control de física.

13
00:00:57,850 --> 00:01:02,200
‫Vamos a agregarlo a nuestro reproductor, BP, junto con el capturador.

14
00:01:02,200 --> 00:01:09,550
‫Así que vayamos al botón Agregar debajo del panel de componentes y busquemos el controlador de física y agreguemos.

15
00:01:09,910 --> 00:01:14,110
‫Y pueden ver que es un componente de actor, no un componente de escena, porque desciende en

16
00:01:14,320 --> 00:01:18,220
‫la sección inferior, por lo que en realidad no tiene una transformación física propia.

17
00:01:18,610 --> 00:01:23,770
‫Lo que hacemos con el mango de física es decirle el objeto que debe agarrar y luego le decimos dónde

18
00:01:23,770 --> 00:01:25,900
‫queremos que coloque el objeto que hemos agarrado.

19
00:01:26,230 --> 00:01:31,810
‫Si va a la documentación, puede ver esto en las funciones que están disponibles.

20
00:01:31,990 --> 00:01:39,370
‫Si se desplaza hacia abajo a la sección de funciones, puede ver que hay un componente de liberación y un componente de captura

21
00:01:39,370 --> 00:01:41,110
‫en la función de ubicación.

22
00:01:41,440 --> 00:01:45,910
‫También hay una ubicación de destino establecida y una rotación.

23
00:01:45,910 --> 00:01:51,100
‫Aquí es donde quiere intentar poner el objeto, pero obviamente respetará cualquier restricción física al

24
00:01:51,100 --> 00:01:56,260
‫hacerlo y lo hará de manera suave como si estuviera en un resorte.

25
00:01:56,500 --> 00:02:02,380
‫Ahora, no vamos a usar estas funciones todavía, pero necesitamos encontrar una manera de obtener

26
00:02:02,380 --> 00:02:05,230
‫este componente en nuestro componente capturador.

27
00:02:05,710 --> 00:02:07,540
‫¿Entonces cómo hacemos eso?

28
00:02:07,840 --> 00:02:15,260
‫Bueno, pasemos a agarrar una C. P y echa un vistazo a un gran juego e intenta conseguirlo.

29
00:02:15,280 --> 00:02:23,740
‫Ahora hay una función en cualquier actor que nos permite encontrar un componente por su tipo.

30
00:02:24,100 --> 00:02:27,110
‫Pero, ¿cuál es el tipo de mango físico?

31
00:02:27,130 --> 00:02:34,450
‫Bueno, es un componente de manejo de física que se apodera de este tipo que necesitamos usar e incluir y puede ver que la

32
00:02:34,450 --> 00:02:40,090
‫inclusión en la documentación es el componente de manejo de física de barra inclinada del motor de física.

33
00:02:40,090 --> 00:02:46,150
‫Así que copiemos eso en un CP capturador y agreguemos debajo de agregar ayudantes de depuración de dibujo.

34
00:02:46,900 --> 00:02:53,260
‫Luego, lo que vamos a hacer es obtener ONA para obtener nuestro acto de

35
00:02:53,680 --> 00:03:00,070
‫propiedad, un puntero luego a una flecha y un componente de búsqueda genial por clase.

36
00:03:00,400 --> 00:03:07,510
‫Ahora bien, esta función es un tipo especial de función llamada función de plantilla en C++,

37
00:03:07,510 --> 00:03:14,230
‫y esto significa que puede pasarle algunos parámetros que realmente se evalúan cuando compila.

38
00:03:14,470 --> 00:03:18,790
‫Y la forma de hacerlo es usando paréntesis angulares como este.

39
00:03:19,240 --> 00:03:25,270
‫Así que usas un paréntesis angular después de la función y le das el tipo que quieres

40
00:03:25,270 --> 00:03:30,640
‫que encuentre, que en nuestro caso es el componente que manejas física como tal.

41
00:03:31,090 --> 00:03:33,220
‫Y luego cierras los paréntesis angulares.

42
00:03:33,220 --> 00:03:37,630
‫Pero debido a que es una función, también debe llamarla usando paréntesis regulares.

43
00:03:37,630 --> 00:03:41,680
‫Entonces pones el segundo grupo de paréntesis después de esto.

44
00:03:41,680 --> 00:03:48,580
‫Entonces puede ver que estos argumentos de tiempo de compilación se pasan usando los corchetes angulares y luego los

45
00:03:48,580 --> 00:03:52,090
‫de tiempo de ejecución se pasan usando los paréntesis.

46
00:03:52,690 --> 00:03:58,840
‫Ahora, como una función regular, esto tendrá un valor de retorno y en este caso el valor de retorno

47
00:03:58,840 --> 00:04:01,270
‫será cualquier tipo que hayamos pasado aquí.

48
00:04:01,420 --> 00:04:08,650
‫Pero como un puntero, podemos tomar un puntero de componente de control de física y crear una variable

49
00:04:08,650 --> 00:04:16,150
‫para eso que llamaremos control de física y establecerlo igual a este componente de búsqueda de propietario por clase.

50
00:04:16,510 --> 00:04:21,850
‫Ahora recordemos un punto y coma al final de esta línea y eso es todo lo

51
00:04:21,850 --> 00:04:25,930
‫que se requiere para que consigamos otro componente en nuestro mismo actor.

52
00:04:26,170 --> 00:04:32,680
‫Ahora recuerde que le dije que los punteros pueden ser peligrosos porque a veces pueden ser nulos y

53
00:04:32,680 --> 00:04:34,510
‫eso puede provocar un bloqueo.

54
00:04:34,840 --> 00:04:42,040
‫Así que imagina que nos olvidamos de poner un componente de manejo de física en nuestro actor, o hemos puesto un capturador en un nuevo actor

55
00:04:42,040 --> 00:04:46,000
‫y aún no lo hemos conectado con un componente de manejo de física.

56
00:04:46,180 --> 00:04:52,360
‫Si este es el caso, entonces el puntero del controlador de física será un puntero nulo.

57
00:04:52,540 --> 00:04:58,540
‫Y si tratamos de usar el operador de flecha o el operador de referencia en ese puntero, colapsará

58
00:04:58,540 --> 00:04:59,530
‫nuestro motor.

59
00:04:59,530 --> 00:05:03,070
‫Y a veces puede ser muy difícil ver cómo se ve ese bloqueo.

60
00:05:03,490 --> 00:05:09,940
‫Así que voy a seguir adelante y causar este bloqueo solo para mostrarte y es posible que puedas

61
00:05:09,940 --> 00:05:15,640
‫reconocerlo si te sucede en el futuro. Voy a reasignar nuestro puntero de manejo de física

62
00:05:15,640 --> 00:05:17,740
‫igual al puntero nulo. .

63
00:05:18,970 --> 00:05:20,230
‫Palabra clave especial.

64
00:05:20,290 --> 00:05:20,680
‫Es todo.

65
00:05:21,100 --> 00:05:22,360
‫No, Pedro.

66
00:05:22,420 --> 00:05:24,520
‫Así es como deletreó el puntero NULL en C++.

67
00:05:24,520 --> 00:05:25,780
‫Luego pones un punto y coma al final.

68
00:05:26,140 --> 00:05:32,170
‫Y luego, lo que podemos hacer es física, manejar la flecha, obtener un nombre así.

69
00:05:32,710 --> 00:05:38,140
‫Y si seguimos adelante y compilamos usando codificación en vivo y cuando termine de compilar, seguiremos adelante

70
00:05:38,140 --> 00:05:43,960
‫y nos aseguraremos, en primer lugar, de guardar todo lo que tenemos aquí en IBP plex y a punto

71
00:05:43,960 --> 00:05:45,520
‫de colapsar. el motor.

72
00:05:45,880 --> 00:05:50,080
‫Y si sigo adelante y presiono reproducir, este es el resultado de que obtendremos un bloqueo.

73
00:05:50,080 --> 00:05:55,360
‫Reportero Y puede sentirse tentado a pensar cuando vea esto que algo salió mal con irreal, pero en realidad

74
00:05:55,360 --> 00:05:58,210
‫es su código el que tiene la culpa aquí.

75
00:05:58,540 --> 00:06:06,190
‫Puede ver que en este informe de bloqueo, la primera línea dice que el problema proviene de que toma dos puntos, dos

76
00:06:06,220 --> 00:06:08,170
‫puntos y comienza a jugar.

77
00:06:08,170 --> 00:06:11,440
‫Y en realidad también nos da el número de línea, que es la línea 28.

78
00:06:11,890 --> 00:06:18,370
‫Entonces puede ver que en este punto de la línea 28, cuando hacemos referencia a ese puntero,

79
00:06:18,370 --> 00:06:26,020
‫para llamar a una función en él, en realidad cometimos un grave error al no verificar primero si ese puntero era

80
00:06:26,020 --> 00:06:26,560
‫nulo.

81
00:06:27,010 --> 00:06:28,300
‫Así que eso es lo que tenemos que hacer.

82
00:06:28,300 --> 00:06:29,650
‫Y lo hacemos con una sentencia if.

83
00:06:29,650 --> 00:06:41,350
‫Básicamente, decimos que si el identificador de física no es igual al puntero nulo, entonces podemos seguir adelante y llamar cosas en ese identificador de física para que podamos poner el identificador de física,

84
00:06:41,350 --> 00:06:47,080
‫obtener el nombre dentro de esta declaración if y eso nos protege porque ese código, que

85
00:06:47,080 --> 00:06:52,270
‫el el código de referencia no se ejecutará en el caso de que tengamos un

86
00:06:52,270 --> 00:06:53,200
‫puntero nulo.

87
00:06:53,470 --> 00:06:58,780
‫Así que voy a seguir adelante y eliminar la línea 27 ahora donde la estamos configurando sin puntero y voy

88
00:06:58,780 --> 00:07:02,410
‫a desafiarte a que imprimas el nombre del componente por ti mismo.

89
00:07:02,860 --> 00:07:10,900
‫Entonces, solo imprima si tenemos el componente real, básicamente no tenemos un puntero nulo y usamos otro para advertir si

90
00:07:10,900 --> 00:07:16,990
‫no logramos obtener ese componente e intentamos eliminar el componente para verificar, pausar el video

91
00:07:17,290 --> 00:07:18,940
‫y tener atrás.

92
00:07:22,230 --> 00:07:22,710
‫Bueno.

93
00:07:22,710 --> 00:07:23,550
‫Bienvenido de nuevo.

94
00:07:23,640 --> 00:07:33,360
‫Así que vamos a crear un nuevo mensaje de registro aquí y vamos a decir tiene un identificador de física, porcentajes de dos puntos

95
00:07:33,660 --> 00:07:37,110
‫y tenemos este nombre de identificador de física.

96
00:07:37,140 --> 00:07:42,990
‫Así que solo voy a cortar y pegar como segundo o cuarto argumento en el registro U.

97
00:07:43,470 --> 00:07:46,770
‫Y le voy a poner una estrella porque es una cuerda.

98
00:07:47,010 --> 00:07:49,980
‫Ahora agreguemos una declaración alt debajo de nuestras declaraciones if.

99
00:07:50,310 --> 00:07:55,470
‫Y aquí vamos a poner otro registro anual, que será esta vez en

100
00:07:55,470 --> 00:08:02,040
‫lugar de una pantalla, vamos a poner un mensaje de advertencia que aparecerá en amarillo y vamos

101
00:08:02,700 --> 00:08:07,200
‫a decir que no. identificador de física encontrado, signo de exclamación.

102
00:08:07,410 --> 00:08:08,880
‫Ahora, no tengo el editor abierto.

103
00:08:08,880 --> 00:08:14,760
‫Así que voy a hacer un cambio de control B para compilar dentro del código de Visual Studio, cerrar la

104
00:08:14,760 --> 00:08:17,700
‫terminal cuando tenga éxito y reiniciar desde el nuevo proyecto.

105
00:08:17,760 --> 00:08:24,930
‫Una vez que se haya iniciado, sigamos adelante y presionemos reproducir, abramos el registro de salida y deberíamos ver el mensaje de

106
00:08:24,930 --> 00:08:25,330
‫registro.

107
00:08:25,330 --> 00:08:26,970
‫A tiene un manejo de la física.

108
00:08:26,970 --> 00:08:29,550
‫¿Qué nombre el nombre es manejar física familiar.

109
00:08:30,060 --> 00:08:39,450
‫Ahora, ¿qué pasaría si fuéramos a nuestro reproductor de pitidos y realmente elimináramos ese controlador de física y siguiéramos

110
00:08:39,450 --> 00:08:41,070
‫adelante y jugáramos?

111
00:08:41,070 --> 00:08:47,880
‫Ahora eche un vistazo a nuestro registro de salida y verá que tenemos una advertencia amarilla que indica que no se encontró ningún identificador

112
00:08:47,970 --> 00:08:48,720
‫de física.

113
00:08:48,840 --> 00:08:49,800
‫Así que dejemos de jugar.

114
00:08:50,070 --> 00:08:55,800
‫Sigamos adelante y volvamos a agregar el identificador de física porque lo vamos a querer y salvaremos al jugador.

115
00:08:55,800 --> 00:08:57,030
‫Gran cosa de BP.

116
00:08:57,030 --> 00:09:03,540
‫Entonces, descubrimos cómo podemos obtener otros componentes desde dentro de un componente y aprendimos cómo lidiar

117
00:09:03,540 --> 00:09:05,220
‫con un valor nulo.

118
00:09:05,220 --> 00:09:08,520
‫Un punto es y por qué debemos tener cuidado.

119
00:09:08,820 --> 00:09:10,230
‫Te veré en la próxima conferencia.

