﻿1
00:00:04,380 --> 00:00:04,920
‫Oye.

2
00:00:04,920 --> 00:00:05,810
‫Bienvenido de nuevo.

3
00:00:05,820 --> 00:00:11,610
‫Estamos listos para terminar nuestro juego, lo que significa que solo quedan algunas cosas por hacer para pulir nuestro

4
00:00:11,610 --> 00:00:15,150
‫juego y dejarlo en un estado con el que estemos contentos.

5
00:00:15,150 --> 00:00:17,730
‫Así que prepárate para terminar este juego.

6
00:00:17,730 --> 00:00:19,170
‫Ya casi hemos terminado.

7
00:00:19,170 --> 00:00:21,450
‫Solo vamos a agregar un par de características.

8
00:00:21,450 --> 00:00:25,980
‫Me gustaría que el movimiento de la cámara fuera un poco más suave, así que vamos a empezar con eso.

9
00:00:26,010 --> 00:00:32,130
‫También me he dado cuenta de que las torres siguen disparando proyectiles después de que el tanque ha muerto, por lo que

10
00:00:32,130 --> 00:00:35,250
‫podemos corregir fácilmente el código para evitar que eso suceda.

11
00:00:35,250 --> 00:00:40,410
‫Y también, voy a visitar un posible problema con el punto de generación del proyectil.

12
00:00:40,410 --> 00:00:43,380
‫Así que entremos y pulamos este juego.

13
00:00:43,740 --> 00:00:46,920
‫Ahora, lo primero que me gustaría mirar es el movimiento de la cámara.

14
00:00:46,920 --> 00:00:50,670
‫Entonces, si sigo adelante y presiono reproducir, te mostraré lo que quiero decir.

15
00:00:50,820 --> 00:00:58,380
‫A medida que me muevo, verá que la cámara sigue exactamente nuestro movimiento cuando giramos y, a medida

16
00:00:58,380 --> 00:01:03,210
‫que avanzamos y retrocedemos, la cámara simplemente nos sigue automáticamente.

17
00:01:03,210 --> 00:01:08,850
‫Ahora, hay un buen truco que podemos agregar a esta cámara que puede hacerla un poco más fluida.

18
00:01:08,850 --> 00:01:11,730
‫Avancemos y abramos el tanque del estanque BP.

19
00:01:11,940 --> 00:01:16,830
‫Ahora aquí en BP Pond Tank, voy a seleccionar nuestro componente de brazo de resorte.

20
00:01:16,830 --> 00:01:23,580
‫Y si busco el retraso de la cámara, veré aquí en la sección de retraso, hay esta casilla de verificación para habilitar el retraso de

21
00:01:23,580 --> 00:01:24,360
‫la cámara.

22
00:01:24,390 --> 00:01:28,440
‫Voy a verificar eso y habilitar el retraso de rotación de la cámara.

23
00:01:28,470 --> 00:01:30,240
‫Voy a comprobar eso también.

24
00:01:30,240 --> 00:01:37,590
‫Ahora, esto nos permite hacer que la cámara se quede atrás y se ponga al día sin problemas, lo que crea un buen

25
00:01:37,590 --> 00:01:39,780
‫tipo de efecto de cámara profesional.

26
00:01:39,780 --> 00:01:42,810
‫Sigamos adelante, presionemos reproducir y probemos esto.

27
00:01:42,810 --> 00:01:50,490
‫Observe que mientras me muevo, la cámara tarda un poco en ponerse al día mientras nos movemos.

28
00:01:50,490 --> 00:01:53,190
‫Y lo mismo ocurre cuando estamos rotando.

29
00:01:53,190 --> 00:01:59,970
‫Así que es como si hubiera un poco de inercia y la cámara estuviera en una especie de pista deslizante y se desacelerara

30
00:01:59,970 --> 00:02:00,840
‫hasta detenerse.

31
00:02:00,840 --> 00:02:07,710
‫Ahora podemos seleccionar el brazo de resorte y podemos cambiar la velocidad de retraso de la cámara y la velocidad de retraso de rotación.

32
00:02:07,710 --> 00:02:15,300
‫Entonces, por ejemplo, si coloco esto en un valor más pequeño, digamos cinco y cinco en lugar de diez, ahora

33
00:02:15,300 --> 00:02:16,950
‫veamos cómo se ve.

34
00:02:17,040 --> 00:02:21,450
‫Así que me estoy moviendo y verás que la cámara tiene un poco más de retraso.

35
00:02:21,450 --> 00:02:25,170
‫Ahora, podemos aumentar o disminuir esto como mejor nos parezca.

36
00:02:25,170 --> 00:02:31,170
‫Esto es algo con lo que puede experimentar y encontrar los valores que funcionan para usted.

37
00:02:31,200 --> 00:02:36,930
‫Aquí tenemos un valor de dos y para mí eso es demasiado retraso.

38
00:02:36,930 --> 00:02:41,100
‫Así que creo que algo entre cinco y dos me funcionaría.

39
00:02:41,100 --> 00:02:46,290
‫Si le gusta este tipo de valor, entonces tal vez lo mantenga en dos o incluso más bajo.

40
00:02:46,290 --> 00:02:54,360
‫Pero voy a poner esto en un valor de, digamos, cuatro para la velocidad de retraso de la cámara y cuatro para la velocidad de retraso de la rotación

41
00:02:54,360 --> 00:02:55,320
‫de la cámara.

42
00:02:55,350 --> 00:02:57,270
‫Echemos un vistazo a cómo se ve eso.

43
00:02:57,270 --> 00:02:59,850
‫Mientras me muevo, la cámara se retrasa.

44
00:02:59,850 --> 00:03:03,660
‫Claramente hay algo de retraso en la cámara, pero no es demasiado.

45
00:03:03,660 --> 00:03:09,660
‫Creo que esto realmente se ve bastante bien, así que estoy bastante satisfecho con eso.

46
00:03:10,320 --> 00:03:15,960
‫Nuestro próximo elemento es el disparo de la torre después de que el tanque ya haya muerto.

47
00:03:15,960 --> 00:03:18,930
‫Déjame seguir adelante y mostrarte lo que quiero decir.

48
00:03:19,020 --> 00:03:19,740
‫Aquí vamos.

49
00:03:19,740 --> 00:03:23,880
‫El tanque ha muerto y las torres siguen disparando.

50
00:03:23,970 --> 00:03:26,970
‫Ahora, esto se debe a que el tanque todavía existe.

51
00:03:26,970 --> 00:03:31,290
‫Y mientras esté dentro del alcance de fuego, las torres seguirán disparando.

52
00:03:31,290 --> 00:03:38,130
‫Esto se maneja fácilmente al tener una especie de variable que podemos verificar para ver si el tanque ha muerto.

53
00:03:38,520 --> 00:03:45,690
‫Así que voy a entrar en la clase de tanque aquí y tanque, y voy a agregar una variable booleana que podemos

54
00:03:45,690 --> 00:03:48,690
‫verificar para ver si el tanque todavía está vivo.

55
00:03:48,690 --> 00:03:53,580
‫Y lo haré público ya que planeamos acceder desde fuera de la clase.

56
00:03:53,580 --> 00:04:00,690
‫Así que voy a hacer de esto una variable alcista llamada Be Alive, y la voy a establecer como verdadera

57
00:04:00,690 --> 00:04:01,500
‫por defecto.

58
00:04:01,500 --> 00:04:09,270
‫Entonces, el tanque comenzará en el estado vivo y luego, cuando el tanque muera, vivo se establecerá en falso.

59
00:04:09,270 --> 00:04:14,130
‫Y eso puede suceder en el CP del tanque en la destrucción del mango.

60
00:04:14,130 --> 00:04:16,530
‫Así que vamos a manejar la destrucción aquí.

61
00:04:16,530 --> 00:04:23,070
‫Y después de establecer estas otras propiedades, estableceré B vivo igual a falso.

62
00:04:23,190 --> 00:04:29,730
‫Entonces, dado que estamos configurando B vivo en falso, podemos saber si el tanque ha muerto y luego podemos simplemente

63
00:04:29,730 --> 00:04:33,120
‫evitar disparar los proyectiles al verificar este valor booleano.

64
00:04:33,120 --> 00:04:38,790
‫Así que vayamos a Tower Dot, CP y aquí en condición de control de incendio.

65
00:04:38,790 --> 00:04:42,990
‫Podemos asegurarnos de que el tanque sigue vivo antes de disparar.

66
00:04:42,990 --> 00:04:46,290
‫Así que primero voy a ver si el tanque es válido.

67
00:04:46,290 --> 00:04:52,560
‫Voy a decir si el tanque es igual al puntero nulo, entonces simplemente regresaré temprano.

68
00:04:52,560 --> 00:04:59,010
‫De esa manera, sabemos que Tank será válido y luego, en nuestra verificación para ver si estamos en

69
00:04:59,010 --> 00:05:03,420
‫el rango de fuego, agregaré un y veré si Tank está vivo.

70
00:05:03,450 --> 00:05:03,870
‫Si tanque.

71
00:05:03,980 --> 00:05:05,830
‫Está vivo, entonces podemos disparar.

72
00:05:05,840 --> 00:05:08,840
‫Si Tank no está vivo, no dispararemos.

73
00:05:09,020 --> 00:05:14,900
‫Ahora, puede que se pregunte si es o no una buena idea poner el retorno en una sola línea como me

74
00:05:14,900 --> 00:05:16,610
‫ha visto hacer en videos anteriores.

75
00:05:16,610 --> 00:05:23,960
‫Y esta es una buena oportunidad para hablar sobre Unreal Engines, mejores prácticas de programación y recomendaciones.

76
00:05:23,990 --> 00:05:30,590
‫Las prácticas de codificación de Unreal Engine recomiendan que tenga llaves con un cuerpo para todas sus declaraciones if,

77
00:05:30,590 --> 00:05:33,080
‫incluso aquellas que tienen una sola declaración.

78
00:05:33,080 --> 00:05:39,200
‫Y la razón es porque si planea agregar varias líneas de código a esto, entonces ya tiene el

79
00:05:39,200 --> 00:05:40,190
‫cuerpo aquí.

80
00:05:40,190 --> 00:05:41,690
‫Y también es más claro.

81
00:05:41,690 --> 00:05:46,160
‫Y eso también me lleva a otro punto, que es mi uso de auto.

82
00:05:46,190 --> 00:05:53,720
‫Utilicé auto aquí en la clase de proyectil un par de veces, y si bien esto puede ser eficiente, no

83
00:05:53,720 --> 00:06:01,940
‫es tan obvio cuáles son los tipos a primera vista, por lo que tampoco se recomienda el uso de auto en prácticas

84
00:06:01,940 --> 00:06:04,220
‫de codificación de motores irreales.

85
00:06:04,220 --> 00:06:09,770
‫Si desea apegarse a las prácticas de codificación recomendadas por Unreal Engine, puede reemplazar estas instancias de

86
00:06:09,770 --> 00:06:11,570
‫automático con el tipo real.

87
00:06:11,570 --> 00:06:19,460
‫Por ejemplo, aquí, get instigator controller devuelve un controlador A para que podamos cambiarlo a un controlador y eso

88
00:06:19,550 --> 00:06:20,990
‫es un puntero.

89
00:06:20,990 --> 00:06:29,210
‫Esta clase estática de tipo de daño devuelve una clase U para que podamos usar su clase aquí y, por supuesto, obtener

90
00:06:29,210 --> 00:06:37,940
‫el propietario aquí devuelve un actor para que podamos usar un actor en lugar de automático aquí y ahora si mira este código,

91
00:06:37,940 --> 00:06:44,840
‫es mucho más obvio cuáles son estos tipos, mientras que auto simplemente enmascara todo y te permite ser

92
00:06:44,840 --> 00:06:48,740
‫perezoso y salirte con la tuya sin escribir los tipos.

93
00:06:48,740 --> 00:06:55,790
‫Ahora, a veces no estoy seguro de qué devuelve una expresión grande, así que usaré auto solo para ver

94
00:06:55,790 --> 00:07:00,410
‫qué tipo es y luego lo reemplazaré con el tipo real.

95
00:07:00,410 --> 00:07:07,880
‫Así que esa es otra forma en la que puedes usar auto para ayudarte a aprender los tipos devueltos por expresiones largas y complicadas

96
00:07:07,880 --> 00:07:08,540
‫como esta.

97
00:07:08,540 --> 00:07:14,120
‫Entonces, dado que estamos en las etapas de pulido, reemplazaré auto con los nombres de tipos reales

98
00:07:14,120 --> 00:07:15,350
‫aquí en proyectil.

99
00:07:15,380 --> 00:07:23,390
‫También voy a entrar en el peón base en la función de fuego donde tenemos este proyectil y esto se devuelve

100
00:07:23,390 --> 00:07:25,940
‫desde esta gran expresión larga aquí.

101
00:07:25,940 --> 00:07:34,550
‫El actor de Spawn devolverá un proyectil en este caso, así que puedo reemplazarlo con un proyectil.

102
00:07:35,640 --> 00:07:36,150
‫Bueno.

103
00:07:36,150 --> 00:07:39,840
‫Eso va a pulir el código en el lado de C++.

104
00:07:39,840 --> 00:07:41,850
‫Sigamos adelante y compilemos esto.

105
00:07:41,850 --> 00:07:47,910
‫Y con una compilación exitosa, regresemos al editor y vamos a presionar reproducir y asegurarnos

106
00:07:47,910 --> 00:07:52,890
‫de que esas torres dejen de dispararnos después de que hayamos muerto.

107
00:07:52,890 --> 00:07:54,180
‫Así que hay un golpe.

108
00:07:55,050 --> 00:08:00,270
‫Hay otro, y estoy esperando, y no veo más proyectiles.

109
00:08:00,300 --> 00:08:01,230
‫Perfecto.

110
00:08:01,260 --> 00:08:01,680
‫Bueno.

111
00:08:01,680 --> 00:08:07,500
‫Entonces, el último punto que me gustaría cubrir antes de terminar esto es el punto de generación del proyectil.

112
00:08:07,530 --> 00:08:14,550
‫Ahora, seleccionemos eso aquí en BP Pond Tank y asegurémonos de que esté lo suficientemente alejado del

113
00:08:14,550 --> 00:08:15,120
‫barril.

114
00:08:15,150 --> 00:08:19,890
‫Antes de hacer eso, lo colocaré muy, muy cerca y le mostraré algunos problemas

115
00:08:19,890 --> 00:08:21,240
‫que podrían surgir.

116
00:08:21,270 --> 00:08:27,570
‫Ahora, mientras avanzo y hago clic con el botón izquierdo del mouse, verán que no veo el proyectil.

117
00:08:27,570 --> 00:08:31,530
‫De hecho, no lo veo en absoluto porque está demasiado cerca.

118
00:08:31,530 --> 00:08:33,100
‫Ya estamos teniendo una colisión.

119
00:08:33,120 --> 00:08:35,970
‫Está siendo destruido antes de que pueda hacer algo.

120
00:08:35,970 --> 00:08:39,810
‫Así que asegúrese de que esté bastante lejos del cañón.

121
00:08:39,840 --> 00:08:45,960
‫Estamos generando algo de humo de todos modos, por lo que parecerá que un rastro de humo lo sigue.

122
00:08:45,960 --> 00:08:48,450
‫Entonces esto todavía se verá bastante realista.

123
00:08:49,970 --> 00:08:51,250
‫Eso se ve bastante bien.

124
00:08:51,260 --> 00:08:58,040
‫Y mientras estamos en los puntos de generación de proyectiles, podría ser una buena idea ir y mirar la torreta del estanque

125
00:08:58,040 --> 00:09:01,010
‫BP y seleccionar su punto de generación de proyectiles.

126
00:09:01,010 --> 00:09:05,270
‫Y si ha tenido problemas para generar proyectiles desde la torreta, es

127
00:09:05,270 --> 00:09:10,570
‫posible que también desee asegurarse de que esté a una buena distancia del cañón de la torreta.

128
00:09:10,580 --> 00:09:11,810
‫Así que ahí lo tenemos.

129
00:09:11,810 --> 00:09:15,980
‫Tenemos un juego funcional y se ve fantástico.

130
00:09:15,980 --> 00:09:21,650
‫Tenemos la capacidad de rodar por el mundo, tenemos la capacidad de disparar proyectiles y hacer

131
00:09:21,650 --> 00:09:22,760
‫estallar cosas.

132
00:09:22,760 --> 00:09:25,190
‫Si golpeamos una torre, podemos destruirla.

133
00:09:25,190 --> 00:09:28,430
‫Si la torre nos golpea, puede destruirnos.

134
00:09:29,380 --> 00:09:30,700
‫Así.

135
00:09:30,700 --> 00:09:38,110
‫Y tenemos condiciones de ganar y perder con widgets HUD que se muestran en la pantalla y nos dicen si hemos

136
00:09:38,110 --> 00:09:40,330
‫ganado o perdido el juego.

137
00:09:40,330 --> 00:09:42,610
‫Así que esto es fantástico.

138
00:09:42,610 --> 00:09:48,670
‫Y si desea empaquetar este juego, puede hacerlo fácilmente subiendo a la parte superior y haciendo

139
00:09:48,670 --> 00:09:56,710
‫clic en el ícono de plataformas para Windows, si está en una máquina con Windows o para iOS, si está usando

140
00:09:56,710 --> 00:10:00,670
‫una Mac. máquina, entonces, por supuesto, tiene estas otras opciones.

141
00:10:00,670 --> 00:10:06,640
‫Si desea empaquetar para otras plataformas, le recomiendo que investigue un poco en línea para buscar

142
00:10:06,640 --> 00:10:08,980
‫las diferentes plataformas y cómo empaquetarlas.

143
00:10:08,980 --> 00:10:14,920
‫Estoy en una máquina con Windows, así que simplemente puedo hacer clic en Empaquetar proyecto para Windows aquí y me

144
00:10:14,920 --> 00:10:17,410
‫preguntará dónde me gustaría empaquetar mi juego.

145
00:10:17,410 --> 00:10:19,780
‫Ahora tengo mi proyecto aquí en Tune Tanks.

146
00:10:19,780 --> 00:10:24,670
‫Voy a hacer clic derecho, crear una nueva carpeta y simplemente voy a llamar a esta compilación.

147
00:10:24,670 --> 00:10:29,110
‫Eso es típicamente donde colocaría un proyecto empaquetado.

148
00:10:29,110 --> 00:10:34,720
‫Así que seleccionaré esa carpeta y permitiré que Unreal Engine empaquete mi juego.

149
00:10:34,720 --> 00:10:40,300
‫Probablemente tomará unos minutos y una vez que esté listo, debería tener un juego empaquetado.

150
00:10:41,080 --> 00:10:41,530
‫Bueno.

151
00:10:41,530 --> 00:10:48,070
‫Entonces, una vez que haya terminado de empaquetar, deberíamos ver la compilación exitosa en el registro de salida y luego

152
00:10:48,070 --> 00:10:51,970
‫podemos buscar en la carpeta que designamos para nuestro proyecto empaquetado.

153
00:10:51,970 --> 00:10:54,670
‫Para mí, será esta carpeta de compilación.

154
00:10:54,700 --> 00:11:02,220
‫Ahora empaqueté cuatro ventanas, así que tengo una carpeta de Windows y aquí están mis tune tanks, dot xy.

155
00:11:02,230 --> 00:11:03,490
‫Es un ejecutable.

156
00:11:03,520 --> 00:11:08,440
‫Puedo hacer doble clic en él y aquí está mi proyecto final.

157
00:11:08,440 --> 00:11:09,490
‫puedo disparar

158
00:11:09,580 --> 00:11:11,260
‫Puedo esquivar

159
00:11:11,990 --> 00:11:18,110
‫Parece que mis torres enemigas pueden dispararme y yo puedo destruirlas.

160
00:11:18,110 --> 00:11:19,550
‫Sí, puedo destruirlos.

161
00:11:19,550 --> 00:11:23,240
‫Me pueden destruir, parece, y puedo perder el juego.

162
00:11:23,360 --> 00:11:26,990
‫Y por supuesto, si tuviera un poco más de habilidad, podría ganar el juego.

163
00:11:27,170 --> 00:11:33,230
‫Y para su desafío final, le pediré que agregue su propio sabor al juego.

164
00:11:33,230 --> 00:11:35,420
‫Haz tuyo este juego.

165
00:11:35,420 --> 00:11:42,200
‫Encuentre nuevos sonidos, efectos o mallas y cree algunas torres y tanques de aspecto funky.

166
00:11:42,200 --> 00:11:48,410
‫Agregue más torres, tal vez agregue diferentes niveles de habilidad, haga que las torres sean cada vez más difíciles a medida que

167
00:11:48,410 --> 00:11:49,580
‫avanza en su nivel.

168
00:11:49,580 --> 00:11:56,480
‫Tal vez suba el nivel del tanque, dele un nivel que pueda aumentar a medida que destruye más y más torres.

169
00:11:56,480 --> 00:12:03,980
‫Tal vez pueda agregar una nueva geometría de nivel y hacer que el tanque suba rampas e intente destruir tanques en áreas

170
00:12:03,980 --> 00:12:05,330
‫difíciles de alcanzar.

171
00:12:05,360 --> 00:12:09,050
‫Las posibilidades son infinitas, pero lo más importante, diviértete.

172
00:12:09,050 --> 00:12:10,700
‫Mientras desarrollas tus juegos.

173
00:12:10,700 --> 00:12:13,160
‫No vas a pausar el video para este desafío.

174
00:12:13,160 --> 00:12:19,070
‫Esto va a ser algo que puedes hacer de ahora en adelante con tus proyectos de juegos.

175
00:12:19,070 --> 00:12:20,630
‫Así que felicidades

176
00:12:20,630 --> 00:12:21,980
‫Terminamos nuestro juego.

177
00:12:21,980 --> 00:12:23,750
‫Espero que hayas disfrutado de esta sección.

178
00:12:23,750 --> 00:12:25,460
‫Me divertí mucho.

179
00:12:25,460 --> 00:12:28,790
‫Este es un gran proyecto de juego y has recorrido un largo camino.

180
00:12:28,790 --> 00:12:34,070
‫Ha aprendido un montón de habilidades a lo largo de esta sección del curso, así que espero que esté listo

181
00:12:34,070 --> 00:12:35,930
‫para pasar a cosas más emocionantes.

182
00:12:35,930 --> 00:12:36,890
‫Muchísimas gracias.

183
00:12:36,890 --> 00:12:39,770
‫Soy Steven y te veré pronto.

