﻿1
00:00:04,080 --> 00:00:05,730
‫Hola y bienvenido de nuevo.

2
00:00:05,760 --> 00:00:10,380
‫Ahora estamos listos para rotar la torreta y nos gustaría hacerlo usando el mouse.

3
00:00:10,380 --> 00:00:14,790
‫Y esa ubicación de golpe del golpe de seguimiento que hemos hecho en el video anterior.

4
00:00:14,880 --> 00:00:22,200
‫Entonces, mientras muevo el cursor del mouse, la torreta gira y mira en la dirección del cursor del mouse.

5
00:00:22,320 --> 00:00:28,110
‫E incluso cuando hago clic en la ventana gráfica y empiezo a jugar, todavía puedo mover el cursor del

6
00:00:28,110 --> 00:00:31,080
‫mouse para girar la torreta y establecer su dirección.

7
00:00:31,110 --> 00:00:35,850
‫Esto me permitirá apuntar cuando tenga la capacidad de disparar proyectiles.

8
00:00:35,880 --> 00:00:36,200
‫Bueno.

9
00:00:36,240 --> 00:00:41,770
‫Entonces, para lograr esto, necesitamos encontrar la dirección hacia la que queremos que apunte nuestra torreta.

10
00:00:41,790 --> 00:00:46,410
‫Y una vez que hayamos encontrado esa dirección, podemos establecer la rotación de la malla de la torreta.

11
00:00:46,500 --> 00:00:52,470
‫Ahora, para obtener la dirección en la que nos gustaría que apunte la torreta, necesitamos hacer un poco

12
00:00:52,470 --> 00:00:53,500
‫de matemática vectorial.

13
00:00:53,520 --> 00:00:59,570
‫Lo que estamos buscando es un vector desde la torreta del tanque hasta nuestra ubicación de seguimiento.

14
00:00:59,580 --> 00:01:05,940
‫Ahora podemos obtener fácilmente la ubicación de nuestro tanque o cualquiera de sus componentes, como la ubicación de la

15
00:01:05,940 --> 00:01:06,960
‫torreta del tanque.

16
00:01:06,990 --> 00:01:09,600
‫Llamaremos a esta ubicación, torreta, ubicación.

17
00:01:09,600 --> 00:01:13,440
‫Y también sabemos cómo podemos obtener la ubicación del cabezal de seguimiento.

18
00:01:13,470 --> 00:01:15,800
‫Llamaremos a esta ubicación de coincidencia de seguimiento.

19
00:01:15,810 --> 00:01:20,760
‫Lo que nos interesa es el vector desde la ubicación de la torreta hasta la ubicación del golpe de seguimiento.

20
00:01:20,760 --> 00:01:23,100
‫Llamaremos a este vector para apuntar.

21
00:01:23,130 --> 00:01:27,030
‫Ahora, la matemática vectorial para llegar al objetivo es bastante simple.

22
00:01:27,060 --> 00:01:33,120
‫Para obtener un vector desde un punto inicial hasta un punto final, siempre es el punto final menos el punto inicial.

23
00:01:33,420 --> 00:01:39,270
‫Entonces, si tomamos nuestro rastro, golpeamos la ubicación y restamos la ubicación de la torreta del vector, entonces el vector

24
00:01:39,270 --> 00:01:41,620
‫que resulta de esto es el objetivo.

25
00:01:41,640 --> 00:01:47,160
‫Ahora, una vez que tenemos el vector de dirección de dos objetivos, queremos convertirlo en una rotación para poder

26
00:01:47,160 --> 00:01:49,530
‫establecer la rotación de la torreta del tanque.

27
00:01:49,530 --> 00:01:53,750
‫Y el tipo de vector tiene una función incorporada llamada rotación.

28
00:01:53,760 --> 00:02:01,230
‫Entonces, si tomamos nuestro vector objetivo y lo llamamos rotación, esto devolvería un rotador F correspondiente a

29
00:02:01,230 --> 00:02:02,260
‫esa dirección.

30
00:02:02,280 --> 00:02:04,430
‫Ahora tenemos que tener algo en mente.

31
00:02:04,440 --> 00:02:11,160
‫El resultado del golpe de seguimiento a menudo estará en el suelo y el vector desde la torreta del tanque hasta el

32
00:02:11,160 --> 00:02:14,620
‫resultado del golpe de seguimiento no será paralelo al suelo.

33
00:02:14,640 --> 00:02:20,850
‫Esto significa que si configuramos la rotación de la torreta del tanque al rotador que obtenemos de ese vector de

34
00:02:20,850 --> 00:02:26,790
‫dirección, podríamos obtener algo como esto donde la torreta está inclinada hacia el suelo, pero no queremos que

35
00:02:26,790 --> 00:02:29,310
‫la torreta del tanque gire hacia abajo.

36
00:02:29,310 --> 00:02:31,350
‫Queremos que siga apuntando hacia adelante.

37
00:02:31,350 --> 00:02:33,780
‫Así que este es el resultado que queremos.

38
00:02:33,810 --> 00:02:39,180
‫En otras palabras, solo queremos cambiar el componente sí de la rotación de la torreta del tanque.

39
00:02:39,180 --> 00:02:44,550
‫De esa manera, apunta en la dirección correcta pero aún permanece paralelo al suelo.

40
00:02:44,550 --> 00:02:51,060
‫Solo hemos cambiado su guiñada, así que regresemos al código VS y creemos una función para rotar la torreta del

41
00:02:51,060 --> 00:02:51,600
‫tanque.

42
00:02:51,630 --> 00:02:57,210
‫Ahora vamos a rotar la torreta en el tanque, pero también nos gustaría rotar la torreta

43
00:02:57,210 --> 00:03:04,290
‫en nuestra torre enemiga y la torre pronto se creará derivada de base pon, lo que significa que si creamos

44
00:03:04,290 --> 00:03:08,820
‫una torreta giratoria función podemos colocarlo aquí en la clase base pong.

45
00:03:08,820 --> 00:03:12,930
‫Así, tanto el tanque como la torre heredarán esta función.

46
00:03:12,930 --> 00:03:18,480
‫Como planeamos usarlo tanto en la torre como en el tanque, podemos proteger esta función.

47
00:03:18,720 --> 00:03:24,630
‫Así que voy a agregar una sección protegida y todas las funciones y variables que coloquemos en la sección

48
00:03:24,630 --> 00:03:29,220
‫protegida serán accesibles en estas clases secundarias, pero no en ninguna otra clase.

49
00:03:29,220 --> 00:03:32,580
‫Entonces es casi tan restringido como las variables privadas.

50
00:03:32,580 --> 00:03:34,860
‫Ahora esta función puede devolver vacío.

51
00:03:34,860 --> 00:03:37,710
‫Voy a llamar a esto torreta giratoria.

52
00:03:38,850 --> 00:03:44,690
‫Y para rotar la torreta, voy a necesitar una especie de destino para mirar.

53
00:03:44,700 --> 00:03:49,620
‫Este puede ser un vector f y podemos llamarlo mirar al objetivo.

54
00:03:49,620 --> 00:03:56,490
‫Entonces, la idea es que si tenemos una función que podemos pasar en algún tipo de ubicación en el mundo, entonces la

55
00:03:56,490 --> 00:04:00,360
‫función debería resultar en la rotación de la torreta hacia esa ubicación.

56
00:04:00,360 --> 00:04:04,680
‫Así que sigamos adelante y proporcionemos una definición de función para rotar torreta.

57
00:04:04,680 --> 00:04:11,280
‫Así que aquí en el CP de peón base, justo debajo del constructor, voy a implementar la rotación de la torreta.

58
00:04:11,280 --> 00:04:16,680
‫Y, por supuesto, necesito el nombre de una clase de peón base con el operador de resolución de alcance aquí.

59
00:04:16,680 --> 00:04:21,180
‫Así que ahora que tengo la torreta giratoria, pensemos en cómo vamos a implementar esto.

60
00:04:21,180 --> 00:04:28,320
‫Lo primero que necesitamos es apuntar al vector el vector desde el componente de la torreta hasta el resultado del golpe de seguimiento

61
00:04:28,320 --> 00:04:30,120
‫debajo del cursor del mouse.

62
00:04:30,120 --> 00:04:38,070
‫Entonces, este puede ser un vector F local llamado al objetivo y lo vamos a igualar al resultado de algunas

63
00:04:38,070 --> 00:04:38,970
‫matemáticas vectoriales.

64
00:04:38,970 --> 00:04:43,350
‫Recuerda, será el destino menos el punto de partida.

65
00:04:43,350 --> 00:04:50,910
‫Y el destino es mirar al objetivo y el punto de partida será la ubicación de la torreta del tanque, en otras

66
00:04:50,910 --> 00:04:54,030
‫palabras, la ubicación de la malla de la torreta.

67
00:04:54,030 --> 00:04:59,880
‫Entonces podemos decir malla de torreta y podemos obtener la ubicación de la malla de torreta.

68
00:04:59,880 --> 00:05:07,290
‫Ahora, la forma de obtener la ubicación mundial de un componente es con esta función obtener la ubicación del componente.

69
00:05:07,290 --> 00:05:09,630
‫Pertenece a la clase de componente de escena de uso.

70
00:05:09,630 --> 00:05:11,460
‫Entonces todos los componentes de la escena lo tienen.

71
00:05:11,460 --> 00:05:15,690
‫Entonces, desde la malla de la torreta, llamaremos a obtener la ubicación del componente.

72
00:05:16,340 --> 00:05:23,600
‫Mirar el objetivo menos la ubicación de la malla de la torreta nos da el vector desde la malla de la torreta hasta el objetivo

73
00:05:23,600 --> 00:05:24,290
‫de observación.

74
00:05:24,320 --> 00:05:30,590
‫Ahora, como mencioné, podemos obtener un rotador EF desde el objetivo usando la función de rotación de vectores F.

75
00:05:30,590 --> 00:05:37,100
‫Así que vamos a hacer un rotador F y podemos llamar a este mirar rotación y lo estableceremos

76
00:05:37,100 --> 00:05:40,100
‫igual a la rotación del punto objetivo.

77
00:05:40,280 --> 00:05:41,570
‫Esa es una llamada de función.

78
00:05:41,570 --> 00:05:46,700
‫Así que ahora tenemos el rotador correspondiente a este vector de dirección objetivo.

79
00:05:46,700 --> 00:05:49,550
‫Pero la cosa es que solo nos importa el YA.

80
00:05:49,550 --> 00:05:51,680
‫No queremos cambiar el tono o el papel.

81
00:05:51,680 --> 00:05:57,290
‫Solo queremos rotar la torreta alrededor del eje z y mantenerla paralela al suelo.

82
00:05:57,290 --> 00:05:59,420
‫Ahora podemos hacer esto de muchas maneras.

83
00:05:59,420 --> 00:06:05,870
‫Por un lado, podemos echar un vistazo a la rotación, el cabeceo y ponerlo a cero.

84
00:06:05,870 --> 00:06:08,180
‫En otras palabras, igualarlo a cero.

85
00:06:08,210 --> 00:06:14,240
‫También podemos echar un vistazo al rol del punto de rotación y ponerlo a cero también.

86
00:06:14,240 --> 00:06:21,020
‫Ahora, después de haber establecido cabeceo y alabeo en cero, tenemos la rotación que queremos, que es solo el componente.

87
00:06:21,020 --> 00:06:22,460
‫Esta es una manera de hacerlo.

88
00:06:22,460 --> 00:06:26,450
‫Otra sería usar una de las sobrecargas del constructor del rotador F.

89
00:06:26,450 --> 00:06:34,820
‫Si dijimos f rotator entre paréntesis y pasamos algunos valores como cero punto F para el primero y la ventana emergente me

90
00:06:34,820 --> 00:06:38,300
‫dice que esa primera entrada es el tono.

91
00:06:38,300 --> 00:06:43,880
‫Y luego, para el ya, podemos usar para apuntar a la rotación.

92
00:06:44,330 --> 00:06:44,990
‫Sí.

93
00:06:44,990 --> 00:06:47,960
‫Y luego, para el rol, podríamos usar cero punto F.

94
00:06:47,960 --> 00:06:55,820
‫Ahora, lo que esto hace es crear un nuevo rotador F con cero para el tono, cero para el rol y el

95
00:06:55,820 --> 00:06:59,420
‫componente del rotador devuelto por la rotación de dos objetivos.

96
00:06:59,420 --> 00:07:05,300
‫Entonces, el valor devuelto por esto nos daría el mismo resultado que lo que hicimos aquí con estas tres líneas.

97
00:07:05,300 --> 00:07:11,990
‫Entonces, dado que esto es un poco más compacto y elegante, creo que preferiría usar esto para que podamos

98
00:07:11,990 --> 00:07:19,370
‫inicializar la mirada en el vector de rotación con el rotador F devuelto llamando al constructor del rotador F de esta manera.

99
00:07:19,370 --> 00:07:21,380
‫Así que voy a eliminar esta línea aquí abajo.

100
00:07:21,380 --> 00:07:23,360
‫Y ahora hemos mirado la rotación.

101
00:07:23,360 --> 00:07:29,000
‫Ahora, lo último que debe hacer en esta función es establecer la rotación para el macerado de la torreta.

102
00:07:29,000 --> 00:07:36,440
‫Ahora podemos configurar la rotación para un componente dado usando esta función de configuración de rotación mundial nuevamente, pertenece al componente

103
00:07:36,440 --> 00:07:38,270
‫de escena de uso.

104
00:07:38,270 --> 00:07:44,300
‫Y la razón por la que usamos la rotación de palabra establecida en lugar de agregar algún tipo de compensación de

105
00:07:44,300 --> 00:07:50,420
‫rotación local es porque tenemos una rotación en el espacio mundial dos, el objetivo es un vector de dirección del espacio mundial.

106
00:07:50,420 --> 00:07:56,000
‫Estamos tomando la ubicación de la malla de la torreta en el espacio mundial y restando la mirada a la ubicación del objetivo en

107
00:07:56,000 --> 00:07:56,750
‫el espacio mundial.

108
00:07:56,750 --> 00:07:58,850
‫Así que esta es una dirección espacial mundial.

109
00:07:58,850 --> 00:08:02,450
‫Por lo tanto, la mirada a la rotación es una rotación del espacio mundial.

110
00:08:02,450 --> 00:08:06,140
‫Así que vamos a usar la rotación mundial establecida en la malla de la torreta.

111
00:08:06,290 --> 00:08:13,280
‫Así que diremos malla de torreta, estableceremos la rotación mundial y pasaremos a mirar la rotación.

112
00:08:13,280 --> 00:08:19,550
‫Así que ahora tenemos una función que puede tomar cualquier objetivo en el mundo y girar la malla de la torreta

113
00:08:19,550 --> 00:08:22,550
‫para mirarlo, pero no rotará la malla hacia abajo.

114
00:08:22,550 --> 00:08:28,100
‫Solo va a cambiar su guiñada, por lo que girará de la forma en que debería girar la torreta de un tanque.

115
00:08:28,100 --> 00:08:31,100
‫Así que ahora tenemos una función para rotar la torreta.

116
00:08:31,130 --> 00:08:36,980
‫Voy a desafiarte a que llames a esta función para configurar la rotación de la torreta, llama a la función de rotación de

117
00:08:36,980 --> 00:08:38,870
‫la torreta en la clase de tanque.

118
00:08:38,870 --> 00:08:40,730
‫Esta es una función protegida.

119
00:08:40,730 --> 00:08:43,070
‫Entonces la clase de tanque tiene acceso a él.

120
00:08:43,070 --> 00:08:49,220
‫Ahora rotar la torreta toma un vector F, la mirada al objetivo, vas a usar ese punto de impacto en el resultado del

121
00:08:49,220 --> 00:08:51,410
‫golpe F de nuestra traza de línea.

122
00:08:51,410 --> 00:08:57,170
‫Así que voy a dejar que usted encuentre el lugar correcto en el código para llamar a esta función.

123
00:08:57,410 --> 00:09:00,920
‫Así que pausa el video y coloca la función de girar la torreta.

124
00:09:00,920 --> 00:09:02,870
‫Llame a la clase de tanques.

125
00:09:06,000 --> 00:09:06,150
‫Bueno.

126
00:09:06,300 --> 00:09:09,960
‫Así que tenemos nuestra función de rotación de torreta y estamos listos para llamarla.

127
00:09:10,140 --> 00:09:18,200
‫Voy a subir el tanque y aquí está mi función de verificación dentro de la comprobación de si la referencia del controlador del jugador.

128
00:09:18,210 --> 00:09:24,870
‫Tengo mi resultado de acierto y después de que se haya invocado un resultado de acierto debajo del cursor, el resultado de acierto

129
00:09:24,870 --> 00:09:25,860
‫tendrá datos válidos.

130
00:09:25,860 --> 00:09:30,480
‫De hecho, estamos usando ese punto de impacto de resultado de golpe y dibujar esfera de depuración.

131
00:09:30,510 --> 00:09:35,370
‫Ahora que ya no necesito dibujar la esfera de depuración, continuaré y la eliminaré.

132
00:09:35,370 --> 00:09:39,900
‫Y en su lugar voy a llamar a nuestra función protegida "rotar torreta".

133
00:09:39,900 --> 00:09:45,750
‫Y para mirar el objetivo, voy a pasar el punto de impacto del punto del resultado del golpe.

134
00:09:47,140 --> 00:09:53,320
‫Así que ahora en cada cuadro vamos a rotar la torreta hacia ese punto de impacto de nuestro resultado de golpe.

135
00:09:53,350 --> 00:09:59,050
‫Ahora, antes de compilar esto, ya no estoy usando ayudantes de depuración de dibujo, así que continuaré y eliminaré ese

136
00:09:59,050 --> 00:10:00,130
‫archivo de encabezado.

137
00:10:00,340 --> 00:10:00,820
‫Bueno.

138
00:10:00,850 --> 00:10:02,590
‫Ahora estoy listo para compilar.

139
00:10:02,970 --> 00:10:03,360
‫Bueno.

140
00:10:03,370 --> 00:10:05,050
‫Estoy de vuelta aquí en el editor.

141
00:10:05,080 --> 00:10:09,440
‫Sigamos adelante, presionemos reproducir y echemos un vistazo.

142
00:10:09,460 --> 00:10:11,460
‫Esto es increíble.

143
00:10:11,470 --> 00:10:12,910
‫Todavía puedo rodar.

144
00:10:12,910 --> 00:10:18,910
‫Puedo mover el mouse y la torreta gira donde quiera que mueva el cursor del mouse.

145
00:10:18,910 --> 00:10:20,350
‫Así que esto es increíble.

146
00:10:20,600 --> 00:10:25,750
‫Bien, antes de terminar con esto, me gustaría abordar un par de cuestiones.

147
00:10:25,750 --> 00:10:28,900
‫Quiero que esto sea agradable y pulido y se vea genial.

148
00:10:28,930 --> 00:10:35,680
‫Ahora, el primer problema ocurre cuando muevo el cursor del mouse cerca del centro del tanque y

149
00:10:35,680 --> 00:10:36,890
‫luego lo atravieso.

150
00:10:36,910 --> 00:10:42,670
‫Verás que en algún momento esa rotación se ajusta muy rápidamente.

151
00:10:42,670 --> 00:10:48,250
‫Y si movemos el mouse de manera desordenada, bueno, eso no se ve muy bien.

152
00:10:48,250 --> 00:10:49,480
‫Se está rompiendo.

153
00:10:49,480 --> 00:10:50,890
‫No tenemos un movimiento fluido.

154
00:10:50,890 --> 00:10:52,270
‫Así que ese es un problema.

155
00:10:52,300 --> 00:10:59,890
‫Ahora, el otro problema es que si hago clic y doy la vuelta y subo al borde, veré que mi torreta se rompe en

156
00:10:59,890 --> 00:11:03,750
‫la otra dirección cuando muevo el cursor del mouse hacia arriba.

157
00:11:03,760 --> 00:11:05,730
‫Entonces, ¿qué está pasando allí?

158
00:11:05,740 --> 00:11:06,910
‫Bueno, averigüémoslo.

159
00:11:06,910 --> 00:11:10,240
‫Volveremos a VS Code y me gustaría recuperar mi esfera de depuración.

160
00:11:10,240 --> 00:11:16,240
‫Así que de vuelta aquí en Tank, voy a ir a la función de tic justo antes de girar la torreta y

161
00:11:16,240 --> 00:11:19,240
‫una vez más voy a llamar a dibujar esfera de depuración.

162
00:11:19,450 --> 00:11:26,380
‫Ahora, para el mundo que estoy pasando obtener mundo para el centro que estoy pasando en punto de impacto de punto

163
00:11:26,380 --> 00:11:35,350
‫de resultado de golpe para el radio, usaré 25 puntos Los segmentos F pueden ser 12, el color puede ser F El color rojo Las líneas persistentes

164
00:11:35,350 --> 00:11:38,440
‫pueden ser falsas y la vida puede ser negativa.

165
00:11:38,440 --> 00:11:40,480
‫Así que lo mismo que hicimos antes.

166
00:11:40,690 --> 00:11:42,280
‫Así que me voy a guardar este aviso.

167
00:11:42,280 --> 00:11:48,700
‫No estoy agregando el archivo de encabezado nuevamente allí y eso es porque los ayudantes de depuración en realidad están incluidos de manera predeterminada,

168
00:11:48,700 --> 00:11:50,830
‫por lo que técnicamente no los necesitamos.

169
00:11:50,830 --> 00:11:56,740
‫Solo voy a guardar, volver al editor, hacer un inicio de codificación en vivo y presionar reproducir.

170
00:11:56,740 --> 00:11:58,600
‫Así que ahora tengo mi esfera de depuración.

171
00:11:58,600 --> 00:12:05,320
‫Así que vayamos al borde del mundo y voy a mover el cursor del mouse hasta

172
00:12:05,320 --> 00:12:07,240
‫donde cae al abismo.

173
00:12:07,240 --> 00:12:10,330
‫Y ahí es donde tenemos el problema.

174
00:12:10,330 --> 00:12:15,940
‫Verá, no tenemos un resultado de acierto debajo del cursor cuando nuestro cursor se mueve hacia arriba porque no hay nada

175
00:12:15,940 --> 00:12:18,730
‫allí de lo que podamos obtener un resultado de acierto.

176
00:12:18,730 --> 00:12:22,120
‫Por lo tanto, nuestro punto de impacto no está definido.

177
00:12:22,120 --> 00:12:25,570
‫Entonces, lo que necesitamos es algo para que ese trazo de línea llegue.

178
00:12:25,600 --> 00:12:28,810
‫Ahora, Unreal Engine tiene muchas herramientas que podemos usar.

179
00:12:28,810 --> 00:12:35,170
‫Lo que voy a hacer es hacer clic en el menú desplegable aquí arriba y abrir el panel del actor de mi lugar y

180
00:12:35,170 --> 00:12:38,380
‫seleccionar este ícono que dice volúmenes y obtener un volumen de bloqueo.

181
00:12:38,380 --> 00:12:39,820
‫Aquí está el volumen de bloqueo.

182
00:12:39,820 --> 00:12:41,710
‫Voy a arrastrar uno directamente.

183
00:12:41,740 --> 00:12:44,020
‫Así que ahora tengo este volumen de bloqueo.

184
00:12:44,110 --> 00:12:48,190
‫Ahora, de forma predeterminada, se supone que los volúmenes de bloqueo son invisibles.

185
00:12:48,190 --> 00:12:54,130
‫Si voy al panel de detalles para esto y me desplazo hacia abajo hasta

186
00:12:54,130 --> 00:13:00,940
‫colisión, veo que Collision Presets es Invisible Wall, lo que parece sugerir que debería bloquear casi todo.

187
00:13:00,940 --> 00:13:06,610
‫Lo único que no está bloqueando es el canal de visibilidad y nuestro trazado de línea se está

188
00:13:06,610 --> 00:13:08,680
‫trazando contra el canal de visibilidad.

189
00:13:08,680 --> 00:13:13,630
‫Cualquier cosa en nuestro mundo que bloquee el canal de visibilidad será golpeada por nuestro rastro de línea.

190
00:13:13,630 --> 00:13:16,540
‫Pero este volumen en particular no lo hará.

191
00:13:16,540 --> 00:13:17,860
‫Se supone que es invisible.

192
00:13:17,860 --> 00:13:22,690
‫Bueno, podemos ir a los ajustes preestablecidos de colisión, abrir el menú desplegable y seleccionar personalizado.

193
00:13:22,720 --> 00:13:28,300
‫Esto nos permitirá cambiar eso para que pueda establecer la respuesta de colisión al canal de visibilidad.

194
00:13:28,300 --> 00:13:29,170
‫es un bloque

195
00:13:29,170 --> 00:13:34,960
‫Así que ahora tengo un volumen invisible, pero está configurado para bloquear el canal de visibilidad, lo que significa que los

196
00:13:34,960 --> 00:13:40,180
‫trazos de línea que se trazan contra el canal de visibilidad como el nuestro lo van a alcanzar.

197
00:13:40,180 --> 00:13:45,580
‫Entonces, lo que puedo hacer es tomar este volumen de bloqueo y escalarlo.

198
00:13:45,580 --> 00:13:47,800
‫Lo pondré un poco más allá de la pared.

199
00:13:47,800 --> 00:13:53,440
‫De hecho, puedo colocarlo justo aquí en los límites de la pared, y lo bajaré un poco

200
00:13:53,440 --> 00:13:55,900
‫para que se superponga con la pared.

201
00:13:55,900 --> 00:14:01,930
‫Y de esa manera tenemos esta barrera invisible aquí, y voy a seguir adelante y escalarla también

202
00:14:01,930 --> 00:14:03,550
‫en la dirección Y.

203
00:14:03,550 --> 00:14:09,880
‫Así que lo haré bonito y grande y lo colocaré en el medio aquí y le daré un poco de relleno.

204
00:14:09,880 --> 00:14:14,050
‫Y también voy a escalarlo hacia arriba en la dirección Z.

205
00:14:14,050 --> 00:14:18,460
‫Así que ahora es agradable y grande y nuestro trazado de línea debería alcanzarlo.

206
00:14:18,460 --> 00:14:20,080
‫Así que vamos a probar esa teoría.

207
00:14:20,110 --> 00:14:23,170
‫Hagamos clic en la ventana gráfica y subamos a la pared.

208
00:14:23,170 --> 00:14:30,250
‫Y, por supuesto, estoy alcanzando ese volumen de bloqueo con mi línea de seguimiento y no tengo ese problema en el

209
00:14:30,250 --> 00:14:34,240
‫que mi torreta se ajusta para buscar en una ubicación indefinida.

210
00:14:34,240 --> 00:14:40,810
‫Probablemente esté mirando hacia el origen del mundo porque ese vector de punto de impacto es todo ceros.

211
00:14:40,810 --> 00:14:43,660
‫Ahora, si subo a esta pared, tengo el mismo problema.

212
00:14:43,660 --> 00:14:46,270
‫Así que necesitamos estos volúmenes de bloqueo.

213
00:14:46,600 --> 00:14:48,950
‫Todo el perímetro de nuestro nivel.

214
00:14:48,970 --> 00:14:50,590
‫Ahora, eso puede ser bastante fácil.

215
00:14:50,590 --> 00:14:54,820
‫Todo lo que necesito hacer es duplicar este volumen de bloqueo.

216
00:14:54,820 --> 00:14:59,290
‫Ahora puedo cambiar de la vista en perspectiva a la vista ortográfica superior.

217
00:14:59,290 --> 00:15:06,070
‫Así que voy a seleccionar la parte superior y desplazarme con la rueda del mouse y simplemente mantener presionada la tecla Alt y

218
00:15:06,070 --> 00:15:11,620
‫duplicar esta pared y colocar una aquí y puedo presionar E para entrar en el modo de rotación.

219
00:15:11,620 --> 00:15:14,740
‫Así que voy a mantener presionada la tecla Alt y rotar 90 grados.

220
00:15:14,740 --> 00:15:21,010
‫Eso me dará una copia y luego presionaré doble u y activaré mi modo de traducción y lo moveré

221
00:15:21,010 --> 00:15:26,920
‫aquí hacia este lado y mantendré presionada la tecla Alt y arrastraré una copia hacia ese lado.

222
00:15:26,920 --> 00:15:28,720
‫Así que ahora tenemos cuatro paredes.

223
00:15:28,720 --> 00:15:34,990
‫Ahora puedo volver de la vista superior a la perspectiva y presionar reproducir, y ahora puedo subir a cualquiera

224
00:15:34,990 --> 00:15:40,240
‫de estas paredes y no importa qué pared esté cubierta, así que se ve genial.

225
00:15:40,240 --> 00:15:42,340
‫Así que eso soluciona uno de nuestros problemas.

226
00:15:42,340 --> 00:15:43,720
‫Pero, ¿y este otro?

227
00:15:43,720 --> 00:15:49,360
‫Si movemos el mouse cerca de nuestro tanque, todavía tenemos este comportamiento esporádico.

228
00:15:49,360 --> 00:15:51,880
‫Así que me gustaría encargarme de eso también.

229
00:15:51,880 --> 00:15:56,770
‫Ahora, la forma en que puedo encargarme de esto es interpolando esa rotación.

230
00:15:56,770 --> 00:16:02,650
‫Entonces, en lugar de establecer este valor de rotación directamente, podemos usar una función

231
00:16:02,650 --> 00:16:08,740
‫de interpolación que esencialmente moverá esa rotación hacia el objetivo que proporcionamos de manera suave.

232
00:16:08,740 --> 00:16:10,270
‫Así que vamos a ver cómo funciona eso.

233
00:16:10,270 --> 00:16:15,970
‫Ahora, me gustaría que esta interpolación esté en nuestra función de rotación de torreta para que podamos volver

234
00:16:15,970 --> 00:16:22,750
‫a la base del peón hacia abajo para rotar la torreta, y en lugar de establecer nuestra rotación mundial para que la

235
00:16:22,750 --> 00:16:28,240
‫torreta mire la rotación, podemos establecerla igual a la valor devuelto por una función de interpolación.

236
00:16:28,240 --> 00:16:34,720
‫Así que voy a eliminar, mirar la rotación y, en su lugar, vamos a llamar a una

237
00:16:34,720 --> 00:16:38,590
‫función en la biblioteca matemática F llamada R inter two.

238
00:16:39,100 --> 00:16:44,530
‫Ahora nuestro en dos está diseñado para manejar la interpolación para rotadores.

239
00:16:44,530 --> 00:16:49,720
‫Ahora su primer parámetro de entrada es una referencia de rotador const F llamada actual.

240
00:16:49,720 --> 00:16:53,650
‫Ese es el valor actual de lo que estamos tratando de cambiar.

241
00:16:53,650 --> 00:16:59,560
‫Lo que estamos tratando de cambiar es la rotación de nuestras torretas y podemos obtener eso de nuestra red de torretas.

242
00:16:59,560 --> 00:17:05,920
‫Así que diremos malla de torreta y la función que queremos usar es obtener rotación de componentes.

243
00:17:05,920 --> 00:17:10,420
‫Es muy parecido a obtener la ubicación del componente, solo que obtiene la rotación.

244
00:17:10,420 --> 00:17:14,200
‫Ahora la siguiente entrada es un rotador F llamado Target.

245
00:17:14,200 --> 00:17:15,310
‫Ese es el valor.

246
00:17:15,310 --> 00:17:21,430
‫Queremos que esta rotación de la malla de la torreta se interprete para que se acerque sin problemas.

247
00:17:21,430 --> 00:17:23,890
‫Esa va a ser nuestra mirada a la rotación.

248
00:17:23,890 --> 00:17:26,620
‫Así que voy a decir mira la rotación.

249
00:17:26,620 --> 00:17:28,630
‫La siguiente entrada es el tiempo Delta.

250
00:17:28,630 --> 00:17:30,640
‫Entonces sabemos la importancia del tiempo Delta.

251
00:17:30,640 --> 00:17:37,030
‫Si estamos moviendo cosas o rotando cosas, queremos que ese movimiento sea independiente de la velocidad de fotogramas.

252
00:17:37,030 --> 00:17:39,700
‫Entonces, para eso, podemos obtener el tiempo Delta.

253
00:17:39,700 --> 00:17:46,210
‫Simplemente puedo incluir estadísticas de juego y, si tienes buena memoria, recordarás que la inclusión

254
00:17:46,210 --> 00:17:49,150
‫es estática de juego kismet slash.

255
00:17:49,150 --> 00:17:57,700
‫Así que obtendré estadísticas del juego aquí para poder acceder a la función estática, obtener segundos delta mundiales y recordar

256
00:17:57,700 --> 00:18:01,150
‫que esto requiere un objeto de contexto mundial.

257
00:18:01,150 --> 00:18:04,030
‫Así que voy a pasar esto a eso.

258
00:18:04,030 --> 00:18:06,340
‫Y por último, necesitamos una velocidad interna.

259
00:18:06,340 --> 00:18:12,280
‫Cuanto mayor sea el valor de la velocidad interna, más rápido interpolaremos hacia el objetivo.

260
00:18:12,280 --> 00:18:18,550
‫Entonces, si configuro esto en un valor de, digamos, cinco F, entonces interpolaremos con bastante lentitud.

261
00:18:18,580 --> 00:18:20,470
‫Veamos cómo se ve esto ahora.

262
00:18:20,470 --> 00:18:25,030
‫Todo esto está en una sola línea y se ejecuta fuera de la pantalla.

263
00:18:25,030 --> 00:18:32,440
‫Entonces, lo que voy a hacer es colocar la entrada para establecer la rotación mundial en su propia línea de esta manera.

264
00:18:32,440 --> 00:18:34,060
‫Así que así.

265
00:18:34,060 --> 00:18:39,820
‫Y luego nuestro intérprete, que tiene estos cuatro parámetros de entrada también ejecutándose fuera de la pantalla.

266
00:18:39,820 --> 00:18:43,270
‫Así que voy a ponerlos cada uno en sus propias líneas.

267
00:18:43,270 --> 00:18:49,420
‫De esa manera podemos ver todas las entradas sin tener que desplazarnos fuera de la pantalla de esa manera.

268
00:18:49,420 --> 00:18:49,840
‫Está bien.

269
00:18:49,840 --> 00:18:54,220
‫Voy a seguir adelante, guardar eso y comenzar la codificación en vivo.

270
00:18:54,220 --> 00:19:01,480
‫Y ahora, si presiono reproducir y muevo el mouse, observe que la rotación demora un tiempo.

271
00:19:01,480 --> 00:19:06,430
‫Eso es porque estamos interpolando sin problemas hacia esa rotación objetivo.

272
00:19:06,430 --> 00:19:07,780
‫Ahora, esto es genial.

273
00:19:07,780 --> 00:19:09,340
‫Eso es exactamente lo que quería.

274
00:19:09,340 --> 00:19:14,950
‫No importa cómo mueva el mouse, nunca obtendré ese movimiento brusco y esporádico.

275
00:19:15,040 --> 00:19:20,170
‫Ahora, cinco es una velocidad de Internet terriblemente lenta, pero podemos cambiar eso.

276
00:19:20,170 --> 00:19:21,820
‫Podemos hacerlo un poco más rápido.

277
00:19:21,820 --> 00:19:28,420
‫Voy a establecer esto en 25, ver cómo se ve, y te dejaré seguir adelante y decidir el valor que te

278
00:19:28,420 --> 00:19:30,040
‫gusta para tu juego.

279
00:19:30,040 --> 00:19:34,450
‫Entonces, una vez más, inicie la codificación en vivo y presione reproducir.

280
00:19:34,510 --> 00:19:39,010
‫Ahora tengo una interpolación bastante rápida, pero no se ajusta.

281
00:19:39,010 --> 00:19:42,910
‫Todavía es rápido, pero no es un chasquido instantáneo.

282
00:19:42,910 --> 00:19:46,360
‫Entonces, mientras no hagamos algo como esto, bueno, no lo conseguiremos.

283
00:19:46,540 --> 00:19:47,860
‫Comportamiento loco.

284
00:19:47,860 --> 00:19:53,500
‫Y, por supuesto, si desea una rotación más lenta, ya sabe cómo hacerlo y hemos terminado con la esfera

285
00:19:53,500 --> 00:19:56,220
‫de depuración dibujada, así que continuaré y eliminaré eso.

286
00:19:56,230 --> 00:19:56,650
‫Bueno.

287
00:19:56,650 --> 00:20:02,920
‫Entonces, en resumen, hemos establecido la rotación de la torreta y estamos pasando un vistazo a Target, que es un

288
00:20:02,920 --> 00:20:05,800
‫vector F correspondiente a un punto en el mundo.

289
00:20:05,800 --> 00:20:08,080
‫En este momento, solo estamos usando el resultado de la coincidencia de rastreo.

290
00:20:08,110 --> 00:20:13,090
‫Ahora colocamos esta función en la clase base pong y la hicimos protegida, lo que significa que

291
00:20:13,090 --> 00:20:15,880
‫pudimos heredar la función en la clase tank.

292
00:20:15,880 --> 00:20:21,190
‫Y una vez que estemos listos para crear una clase de torre basada en la base, esa clase de

293
00:20:21,190 --> 00:20:24,610
‫torre heredará esta función de rotación de torreta y podremos reutilizarla.

294
00:20:24,610 --> 00:20:26,050
‫Todo lo que tenemos que hacer es pasar.

295
00:20:26,050 --> 00:20:31,750
‫En una nueva mirada a Target, trabajaremos en la creación de una clase de torre derivada de la base, en las

296
00:20:31,750 --> 00:20:32,380
‫próximas conferencias.

297
00:20:32,380 --> 00:20:33,250
‫Te veré pronto.

