﻿1
00:00:04,130 --> 00:00:04,610
‫Oye.

2
00:00:04,610 --> 00:00:05,450
‫Bienvenido de nuevo.

3
00:00:05,480 --> 00:00:09,080
‫Ahora, ya hemos creado una clase base -- C++.

4
00:00:09,200 --> 00:00:16,310
‫En este video, derivaremos de esa clase para crear una nueva clase secundaria basada en la base --.

5
00:00:16,340 --> 00:00:19,310
‫Así que discutamos por qué querríamos hacer tal cosa.

6
00:00:19,580 --> 00:00:26,300
‫Así que tenemos esta clase base -- y sabemos que vamos a tener dos clases diferentes que se derivan de

7
00:00:26,300 --> 00:00:27,080
‫base --.

8
00:00:27,080 --> 00:00:30,020
‫Vamos a tener nuestro tanque y vamos a tener la torre.

9
00:00:30,050 --> 00:00:34,760
‫Ahora, la base contiene mallas, una cápsula y un punto de generación.

10
00:00:34,760 --> 00:00:38,210
‫Y estas son cosas que tanto el Tanque como la torre pueden heredar.

11
00:00:38,360 --> 00:00:44,480
‫Pero el tanque y la torre también van a tener algunas funciones que difieren entre sí.

12
00:00:44,480 --> 00:00:50,060
‫Por un lado, nuestro tanque se moverá por el mundo y también será controlado por el

13
00:00:50,060 --> 00:00:50,720
‫jugador.

14
00:00:50,720 --> 00:00:55,220
‫Por lo tanto, deberá configurarse para recibir entradas del teclado y el mouse.

15
00:00:55,220 --> 00:00:57,950
‫La torre, por otro lado, solo se quedará allí.

16
00:00:57,980 --> 00:01:03,860
‫No necesita ninguna entrada del jugador, ya que todas sus acciones estarán controladas por código.

17
00:01:03,860 --> 00:01:10,010
‫Entonces, debido a que el tanque y la torre se comportarán de manera diferente, usaremos la herencia para

18
00:01:10,010 --> 00:01:16,730
‫crear clases secundarias de base, para que podamos heredar lo que tienen en común y luego agregar a cada clase las

19
00:01:16,730 --> 00:01:18,290
‫características que serán diferentes.

20
00:01:18,290 --> 00:01:23,960
‫Así que estamos de regreso aquí en el editor y voy a ir a nuestras clases de C++, la carpeta de

21
00:01:23,960 --> 00:01:29,240
‫Tune Tank donde tenemos nuestra clase base y esta será la clase de la que nos estamos derivando.

22
00:01:29,240 --> 00:01:35,480
‫Ahora podemos hacer clic con el botón derecho aquí y seleccionar crear una clase C++ derivada de la base --.

23
00:01:35,480 --> 00:01:41,690
‫Así que elijamos eso y voy a permitir que coloque esta clase en la misma carpeta de tanques de slash tune

24
00:01:41,690 --> 00:01:43,550
‫de origen como base --.

25
00:01:43,610 --> 00:01:47,360
‫Y por el nombre de esto, voy a llamarlo tanque.

26
00:01:47,360 --> 00:01:54,560
‫Así que nuestra clase de tanque será la clase de nuestro tanque real, que estamos controlando y moviendo por

27
00:01:54,560 --> 00:01:55,400
‫el mundo.

28
00:01:55,430 --> 00:01:57,410
‫Así que hagamos clic en crear clase.

29
00:01:57,560 --> 00:02:06,470
‫Bien, hemos compilado y el código vs se ha abierto con nuestro nuevo archivo de tanque y también tenemos Tank CP.

30
00:02:06,500 --> 00:02:08,210
‫Ahora estos son bastante desnudos.

31
00:02:08,210 --> 00:02:14,570
‫Realmente no hay nada aquí, pero aunque no podemos verlos, hemos heredado algunas cosas de

32
00:02:14,570 --> 00:02:15,950
‫la clase base.

33
00:02:15,950 --> 00:02:19,580
‫Tenemos esos componentes que hemos agregado a la base --.

34
00:02:19,580 --> 00:02:23,810
‫Aunque esas son variables privadas, todavía existen en esta clase.

35
00:02:23,810 --> 00:02:29,030
‫Entonces, ahora que hemos creado nuestra clase de tanque, hablemos de un par de cosas.

36
00:02:29,030 --> 00:02:31,880
‫El tanque necesitará que la torreta no.

37
00:02:31,880 --> 00:02:37,490
‫Bueno, dado que vamos a controlar el tanque, vamos a necesitar una forma de concentrarnos en el

38
00:02:37,490 --> 00:02:39,530
‫tanque mientras rueda por el nivel.

39
00:02:39,950 --> 00:02:43,880
‫Ahora, en esta imagen, esto aquí es un componente de la cámara.

40
00:02:43,880 --> 00:02:47,030
‫Su clase C ++ es su componente de cámara.

41
00:02:47,180 --> 00:02:55,100
‫Y esta línea roja aquí se llama componente de brazo de resorte y su clase C++ es su componente de brazo de resorte.

42
00:02:55,100 --> 00:03:01,370
‫Agregar estos componentes a un -- nos permite ver el -- desde el punto de vista de la cámara.

43
00:03:01,370 --> 00:03:07,790
‫Y si la cámara y su brazo de resorte están unidos al... de alguna manera, seguirán al...

44
00:03:07,790 --> 00:03:08,930
‫alrededor del mundo.

45
00:03:08,930 --> 00:03:14,540
‫Ahora, de vuelta aquí en el editor, si volvemos a la carpeta --'s y abrimos BP -- tank, podemos hacer clic

46
00:03:14,540 --> 00:03:16,730
‫en la ventana gráfica para poder ver todo.

47
00:03:16,730 --> 00:03:22,100
‫Y luego podemos seleccionar la composición de la cápsula y hacer clic en agregar y seleccionar el brazo de resorte.

48
00:03:22,100 --> 00:03:24,080
‫Este es un componente de brazo de resorte.

49
00:03:24,080 --> 00:03:25,610
‫Parece una línea roja.

50
00:03:25,730 --> 00:03:31,490
‫Ahora, con nuestro componente de brazo de resorte seleccionado, podemos agregar otro componente y elegir la cámara.

51
00:03:31,490 --> 00:03:37,400
‫Ahora, una vez que hemos agregado la cámara unida al brazo de resorte, ahora tenemos una forma de ver desde el punto

52
00:03:37,400 --> 00:03:41,230
‫de vista de la cámara una vez que comenzamos a controlar el --.

53
00:03:41,240 --> 00:03:43,040
‫Ahora el brazo de resorte es bastante útil.

54
00:03:43,040 --> 00:03:49,250
‫Tiene esta longitud de brazo objetivo y si la ajusta, verá que la cámara se ajusta junto con el brazo

55
00:03:49,250 --> 00:03:49,940
‫de resorte.

56
00:03:49,940 --> 00:03:54,470
‫Entonces, esta es una forma de controlar qué tan lejos está la cámara del --.

57
00:03:54,470 --> 00:04:00,170
‫Estas son definitivamente cosas que queremos en nuestra clase --, pero las vamos a agregar desde el

58
00:04:00,170 --> 00:04:04,460
‫lado de C++ en lugar de solo agregarlas aquí en el proyecto.

59
00:04:04,460 --> 00:04:05,750
‫Así que voy a borrar esos.

60
00:04:05,750 --> 00:04:10,130
‫Entonces, para su desafío, me gustaría que agregue algunas cosas a la clase de tanque.

61
00:04:10,130 --> 00:04:15,890
‫Por un lado, necesitamos un componente de brazo de resorte y un componente de cámara, así que cree estas variables y

62
00:04:15,890 --> 00:04:16,790
‫conviértalas en punteros.

63
00:04:16,790 --> 00:04:21,920
‫Continúe y haga una sección pública y otra privada y coloque estas variables en la sección privada.

64
00:04:21,920 --> 00:04:27,590
‫Ahora necesitaremos que sean propiedades U, así que dales macros de propiedad y completa esas macros con

65
00:04:27,590 --> 00:04:31,610
‫los especificadores apropiados según lo que aprendiste en las lecciones anteriores.

66
00:04:31,640 --> 00:04:36,920
‫Ahora, una vez que haya creado estas variables, cree un constructor y colóquelo en la

67
00:04:36,920 --> 00:04:44,120
‫sección pública y defínalo en el archivo CP, y luego dentro del constructor construya nuestros componentes de cámara y brazo de

68
00:04:44,120 --> 00:04:46,340
‫resorte usando crear subobjeto predeterminado.

69
00:04:46,340 --> 00:04:50,750
‫Asegúrese de utilizar el archivo adjunto de configuración para conectar estos componentes a algo.

70
00:04:50,750 --> 00:04:54,380
‫Nos gustaría que nuestro componente de brazo de resorte se adjuntara al componente raíz.

71
00:04:54,380 --> 00:05:00,500
‫Por lo tanto, use el componente raíz y configure el accesorio de configuración y, para la cámara, conéctelo al brazo de resorte.

72
00:05:00,500 --> 00:05:02,870
‫Puede volver a consultar la clase base.

73
00:05:03,020 --> 00:05:05,950
‫R Recuérdese cómo se ve el código para hacer estas cosas.

74
00:05:05,960 --> 00:05:09,710
‫Adelante, pausa el video y agrega estas cosas a la clase de tanque.

75
00:05:12,580 --> 00:05:13,180
‫Está bien.

76
00:05:13,180 --> 00:05:14,380
‫Así que estamos aquí en Tank.

77
00:05:15,250 --> 00:05:16,540
‫Ahora, lo primero es lo primero.

78
00:05:16,540 --> 00:05:20,110
‫Me gustaría tener una sección pública y una sección privada.

79
00:05:20,350 --> 00:05:24,840
‫Así que la sección privada será donde agreguemos estos dos nuevos componentes.

80
00:05:24,850 --> 00:05:31,810
‫Vamos a querer un componente de brazo de resorte en U, que será un puntero, y podemos llamarlo brazo de

81
00:05:31,810 --> 00:05:32,290
‫resorte.

82
00:05:32,290 --> 00:05:37,760
‫Y también necesitaremos un nuevo componente de cámara y lo llamaremos cámara.

83
00:05:37,780 --> 00:05:38,260
‫Esta bien.

84
00:05:38,260 --> 00:05:39,970
‫Si sus nombres son ligeramente diferentes.

85
00:05:40,090 --> 00:05:45,070
‫Ahora, desde el principio, veo los errores de IntelliSense aquí, lo que significa que

86
00:05:45,070 --> 00:05:46,420
‫tendré que declararlos.

87
00:05:46,420 --> 00:05:51,280
‫Así que voy a usar clase con brazo de resorte y clase con cámara.

88
00:05:51,280 --> 00:05:53,150
‫Y ahora estos son declarados hacia adelante.

89
00:05:53,170 --> 00:05:55,240
‫Ahora necesitamos nuestras nuevas propiedades.

90
00:05:55,240 --> 00:05:57,460
‫Así que agreguemos las nuevas macros de propiedades.

91
00:05:57,970 --> 00:06:02,930
‫Y dentro de la macro de propiedades vamos a querer tener algunos especificadores.

92
00:06:02,950 --> 00:06:09,550
‫Estos serán visibles en cualquier lugar, ya que vimos que los componentes deben estar visibles en cualquier lugar para que

93
00:06:09,550 --> 00:06:13,010
‫podamos ajustar sus parámetros en el panel de detalles.

94
00:06:13,030 --> 00:06:18,550
‫Ahora, no veo ninguna necesidad inmediata de exposición al gráfico de eventos, por lo que no creo que necesitemos

95
00:06:18,550 --> 00:06:20,600
‫lectura, escritura o solo lectura de planos.

96
00:06:20,620 --> 00:06:21,160
‫Esta bien.

97
00:06:21,160 --> 00:06:23,770
‫Si los agregaste, los voy a dejar fuera ahora.

98
00:06:23,770 --> 00:06:25,630
‫Voy a darles una categoría.

99
00:06:26,410 --> 00:06:32,230
‫Y dado que estos son componentes, simplemente los colocaré en nuestra categoría de componentes junto con

100
00:06:32,230 --> 00:06:33,330
‫nuestros otros componentes.

101
00:06:33,340 --> 00:06:38,470
‫Ahora no los estoy exponiendo al gráfico de eventos, por lo que no necesito que nuestro metapermiso de acceso privado se especifique

102
00:06:38,500 --> 00:06:38,940
‫aquí.

103
00:06:38,950 --> 00:06:45,640
‫Así que esto es suficiente para el brazo de resorte y me gustaría darle al componente de la cámara la misma propiedad que usted.

104
00:06:46,180 --> 00:06:47,590
‫Así que lo estoy copiando.

105
00:06:47,590 --> 00:06:49,270
‫Así que ahora tenemos nuestros componentes.

106
00:06:49,420 --> 00:06:54,700
‫Lo siguiente que debe hacer es construirlos en el constructor, lo que significa que necesitamos un constructor.

107
00:06:54,700 --> 00:07:02,650
‫Ahora el constructor tendrá el mismo nombre que la clase, por lo que es un tanque y debemos definir este constructor en

108
00:07:02,650 --> 00:07:03,910
‫el archivo CP.

109
00:07:03,910 --> 00:07:08,710
‫Así que vayamos a Tank CP y creemos un tanque.

110
00:07:09,520 --> 00:07:16,180
‫Así que ahí está el cuerpo de nuestra función y el constructor del tanque debe tener como prefijo nuestro nombre de clase y el

111
00:07:16,180 --> 00:07:17,710
‫operador de resolución de alcance.

112
00:07:17,710 --> 00:07:19,360
‫Esos son estos dos puntos dobles aquí.

113
00:07:19,360 --> 00:07:24,850
‫De esa manera, no solo estamos creando una nueva función, sino que estamos definiendo nuestro constructor para esta clase.

114
00:07:24,850 --> 00:07:27,130
‫Ahora nos gustaría construir estos componentes.

115
00:07:27,130 --> 00:07:29,530
‫Entonces, comencemos con el brazo de resorte.

116
00:07:29,860 --> 00:07:39,160
‫Así que vamos a decir que el brazo de resorte es igual a crear un subobjeto predeterminado y este será un componente de brazo de resorte en U.

117
00:07:41,260 --> 00:07:45,310
‫Y para el texto, simplemente llamaré a este brazo de resorte.

118
00:07:46,270 --> 00:07:54,490
‫Y para el archivo adjunto, vamos a configurar el brazo de resorte, configurar el archivo adjunto, pasando el componente raíz.

119
00:07:55,920 --> 00:07:56,220
‫Ahora.

120
00:07:56,220 --> 00:07:57,240
‫lo estaba esperando

121
00:07:57,240 --> 00:07:58,050
‫Ahí está.

122
00:07:58,050 --> 00:08:03,920
‫El error de IntelliSense que dice puntero a componente de brazo de resorte de uso de tipo de clase incompleto.

123
00:08:03,930 --> 00:08:10,320
‫Eso es porque necesitamos incluir el archivo de encabezado ya que estamos creando y usando un componente de brazo de resorte.

124
00:08:10,320 --> 00:08:16,020
‫Así que aquí está la documentación de mi motor irreal y si me desplazo hacia abajo, está mi include.

125
00:08:16,020 --> 00:08:21,820
‫Así que voy a copiar eso y pegarlo aquí en la parte superior, justo debajo del borde del tanque.

126
00:08:21,900 --> 00:08:26,520
‫Ahora, solo una nota al margen en general, mantendrá su archivo de encabezado de clase incluido en la

127
00:08:26,520 --> 00:08:29,370
‫parte superior e incluye para sus componentes debajo de eso.

128
00:08:29,370 --> 00:08:30,750
‫Así que tenemos nuestro brazo de resorte.

129
00:08:30,750 --> 00:08:32,790
‫Es hora de construir la cámara.

130
00:08:32,790 --> 00:08:39,300
‫Así que vamos a decir que la cámara crea un subobjeto predeterminado, su componente de cámara.

131
00:08:40,050 --> 00:08:45,240
‫Y en la macro de texto, voy a llamar a esto simplemente cámara.

132
00:08:45,240 --> 00:08:51,120
‫Y para la cámara voy a llamar accesorio de configuración que pasa en brazo de resorte.

133
00:08:51,390 --> 00:08:54,240
‫Y, por supuesto, necesito el archivo de encabezado de la cámara.

134
00:08:54,240 --> 00:08:59,820
‫Así que aquí está la documentación del motor irreal y aquí donde dice documentación de

135
00:08:59,820 --> 00:09:05,490
‫búsqueda, voy a escribir el componente de la cámara y aquí veo el componente de la cámara.

136
00:09:05,490 --> 00:09:06,600
‫Seleccionaré eso.

137
00:09:06,600 --> 00:09:09,450
‫Y aquí está la documentación para el componente de la cámara.

138
00:09:09,450 --> 00:09:14,100
‫Así que lo copiaré para incluirlo y pegarlo aquí mismo en la parte superior de nuestro archivo.

139
00:09:14,100 --> 00:09:15,930
‫Y ahora deberíamos estar bien.

140
00:09:15,960 --> 00:09:18,630
‫Bien, sigamos adelante y compilemos esto.

141
00:09:18,810 --> 00:09:19,230
‫Bueno.

142
00:09:19,230 --> 00:09:21,180
‫Así que tengo una compilación exitosa.

143
00:09:21,210 --> 00:09:24,210
‫Volvamos al editor y aquí en -- Tank.

144
00:09:24,240 --> 00:09:30,690
‫Por supuesto, no vemos nada porque, el tanque se deriva de la base, y los componentes que acabamos de

145
00:09:30,690 --> 00:09:33,510
‫agregar, los agregamos a la clase del tanque.

146
00:09:33,510 --> 00:09:39,720
‫Así que BP -- tank no los obtendrá porque no se deriva de la clase tank.

147
00:09:39,720 --> 00:09:44,910
‫Ahora podríamos ir y crear un nuevo plano basado en la clase de tanque, pero luego tendríamos

148
00:09:44,910 --> 00:09:46,710
‫que configurar estos componentes nuevamente.

149
00:09:46,710 --> 00:09:50,190
‫Y realmente no tengo ganas de pasar por todo ese trabajo por segunda vez.

150
00:09:50,190 --> 00:09:55,080
‫Hay una manera más fácil de reparar este plano en la clase de tanque.

151
00:09:55,080 --> 00:10:01,530
‫Lo hacemos subiendo a la configuración de la clase y en el panel de detalles con la configuración de la clase seleccionada,

152
00:10:01,530 --> 00:10:04,980
‫vemos las opciones de la clase y está esta clase principal.

153
00:10:04,980 --> 00:10:10,800
‫El menú desplegable muestra que está configurado como base, pero si hacemos clic en él, podemos buscar

154
00:10:10,800 --> 00:10:13,200
‫tanque y elegir tanque como clase base.

155
00:10:13,200 --> 00:10:17,220
‫Y ahora este modelo se deriva de la clase de tanque.

156
00:10:17,220 --> 00:10:23,070
‫Entonces vemos que todas esas propiedades que establecemos con nuestros componentes, como la malla y el tamaño de la

157
00:10:23,070 --> 00:10:24,630
‫cápsula, todavía están allí.

158
00:10:24,660 --> 00:10:27,090
‫Solo que ahora vemos una cámara.

159
00:10:27,390 --> 00:10:29,730
‫De hecho, tenemos un brazo de resorte y una cámara.

160
00:10:29,730 --> 00:10:33,720
‫Y si seleccionamos el brazo de resorte ahora, podemos ver esa línea roja.

161
00:10:33,720 --> 00:10:34,710
‫Así que esto es genial.

162
00:10:34,710 --> 00:10:38,880
‫Así que podría tomar este componente del brazo de resorte y cambiar la longitud del brazo objetivo.

163
00:10:38,880 --> 00:10:46,650
‫Si quisiera, podría configurarlo en algo así como 600 e incluso puedo cambiar su rotación para que incline la cámara

164
00:10:46,650 --> 00:10:52,770
‫hacia el tanque seleccionando el modo de rotación y girándola un poco hacia arriba.

165
00:10:52,770 --> 00:10:58,500
‫Me gusta Ahora me gustaría señalar que no debe cambiar la ubicación de la cámara.

166
00:10:58,530 --> 00:11:03,990
‫Puede ser tentador seleccionar la cámara y moverla por el mundo para colocarla y colocarla en

167
00:11:03,990 --> 00:11:05,190
‫el ángulo correcto.

168
00:11:05,190 --> 00:11:07,350
‫Pero esta no es la forma correcta de hacerlo.

169
00:11:07,350 --> 00:11:13,410
‫La forma correcta es establecer la rotación y la longitud del brazo objetivo del componente del brazo de resorte.

170
00:11:13,410 --> 00:11:17,790
‫Y la razón es que quieres que la cámara esté unida al extremo del brazo de resorte.

171
00:11:17,790 --> 00:11:23,460
‫El brazo de resorte tiene muchas funciones integradas diferentes, como encogerse cuando la cámara choca

172
00:11:23,460 --> 00:11:29,430
‫contra una pared para evitar obstáculos, bloquear la vista del estanque y otras cosas por el estilo.

173
00:11:29,430 --> 00:11:35,070
‫Así que querrá que la cámara se conecte al extremo del brazo de resorte y luego ajuste el

174
00:11:35,070 --> 00:11:39,990
‫brazo de resorte en lugar de ajustar la posición y la rotación de la cámara.

175
00:11:40,110 --> 00:11:47,070
‫Entonces, en este video, creamos la clase de tanque y la derivamos del estanque base para heredar esas cualidades de

176
00:11:47,070 --> 00:11:48,960
‫la clase de estanque base.

177
00:11:49,140 --> 00:11:56,100
‫Agregamos un componente de brazo de resorte y un componente de cámara y los expusimos al editor usando solo visible y

178
00:11:56,100 --> 00:11:58,500
‫los colocamos en su propia categoría.

179
00:11:58,500 --> 00:12:03,900
‫Así que nos estamos acercando al producto terminado paso a paso y continuaremos desarrollando este tanque en

180
00:12:03,900 --> 00:12:05,130
‫la próxima lección.

181
00:12:05,460 --> 00:12:06,510
‫Te veré pronto.

