﻿1
00:00:04,260 --> 00:00:05,340
‫Bienvenido de nuevo.

2
00:00:05,700 --> 00:00:11,550
‫Ahora tenemos un modo de juego y nos gustaría usarlo para determinar cuándo podemos iniciar el juego.

3
00:00:11,580 --> 00:00:17,700
‫Ahora, algunos juegos tienen un retraso o un temporizador de cuenta regresiva que comienza cuando comienza el juego.

4
00:00:17,700 --> 00:00:23,460
‫Y después de un período de tiempo determinado, el jugador puede mover el personaje o, en nuestro caso,

5
00:00:23,460 --> 00:00:25,450
‫el tanque por el mundo.

6
00:00:25,470 --> 00:00:28,500
‫Así que vamos a implementar eso en este video.

7
00:00:28,530 --> 00:00:35,520
‫Esto implicará primero deshabilitar la entrada para que no podamos movernos cuando el juego comience por primera vez y

8
00:00:35,520 --> 00:00:41,860
‫luego configuraremos un temporizador y después de un período de tiempo determinado, podremos habilitar la entrada.

9
00:00:41,880 --> 00:00:47,870
‫Así que volvamos al modo de juego Tune Tanks y agreguemos un par de cosas aquí.

10
00:00:47,880 --> 00:00:54,030
‫Primero, me gustaría agregar un flotador para la cantidad de tiempo que debe pasar cuando comienza el juego antes de que

11
00:00:54,030 --> 00:00:55,380
‫podamos comenzar a movernos.

12
00:00:55,410 --> 00:01:03,120
‫Entonces, este flotador se llamará retraso de inicio y lo inicializaré en tres puntos F para que tengamos que esperar

13
00:01:03,120 --> 00:01:06,800
‫3 segundos antes de que podamos comenzar el juego.

14
00:01:06,810 --> 00:01:12,420
‫Ahora, tan pronto como comience el juego, me gustaría iniciar este temporizador, lo que significa que me gustaría una función que

15
00:01:12,420 --> 00:01:16,510
‫inicie este temporizador, y también voy a hacer que esta sea una función privada.

16
00:01:16,530 --> 00:01:21,180
‫Voy a hacer de esto una función nula llamada manejar el inicio del juego.

17
00:01:21,210 --> 00:01:25,200
‫Ahora puedo implementar manejar el inicio del juego en el modo de juego tune tanks.

18
00:01:25,470 --> 00:01:28,320
‫Baje aquí debajo de comenzar a jugar.

19
00:01:28,770 --> 00:01:36,090
‫Ahora no me olvidaré de agregar el nombre de la clase del modo de juego tune tanks aquí y ahora tengo una función de inicio

20
00:01:36,090 --> 00:01:36,930
‫del juego.

21
00:01:37,170 --> 00:01:40,410
‫Ahora, el lugar para llamar a esto sería Begin Play.

22
00:01:40,620 --> 00:01:43,590
‫Dado que Begin Play se llama al comienzo del juego.

23
00:01:43,590 --> 00:01:47,180
‫Así que voy a llamar a manejar el juego, comenzar aquí y comenzar a jugar.

24
00:01:47,190 --> 00:01:52,110
‫Y dado que estamos haciendo un par de cosas aquí al comienzo del juego donde configuramos

25
00:01:52,110 --> 00:01:58,050
‫el tanque y los tanques de sintonización, el jugador, las variables del controlador, me gustaría moverlos al inicio del juego.

26
00:01:58,050 --> 00:02:03,600
‫Así que voy a moverlos directamente hacia abajo para manejar el inicio del juego y de esa manera se configurará el

27
00:02:03,600 --> 00:02:08,940
‫controlador de jugador tank y tune tanks ya que estamos llamando handle game start aquí y comenzar a jugar.

28
00:02:08,940 --> 00:02:15,990
‫Así que aquí es donde me gustaría iniciar un temporizador de cuenta regresiva después del cual podemos habilitar la entrada del usuario.

29
00:02:15,990 --> 00:02:21,480
‫Ahora, antes de iniciar el temporizador, voy a desactivar la entrada para que no podamos mover el tanque todavía.

30
00:02:21,690 --> 00:02:24,420
‫Y eso va a requerir nuestra función.

31
00:02:24,420 --> 00:02:29,670
‫Colocamos aquí en tanques de sintonía, el controlador del jugador llamado establecer el estado habilitado del jugador.

32
00:02:29,670 --> 00:02:33,690
‫Y eso significa que voy a usar tune tanks, controlador de jugador.

33
00:02:33,690 --> 00:02:38,400
‫Y si voy a usar el controlador de jugador de tune tank, es una buena idea asegurarse de que sea válido.

34
00:02:38,400 --> 00:02:46,200
‫Así que voy a decir if tune tanks, player, controller y si llegamos al

35
00:02:46,200 --> 00:02:57,570
‫interior de esta declaración if, entonces puedo tomar tune tanks, player controller y llamar al estado habilitado del reproductor y pasar falso.

36
00:02:57,690 --> 00:03:00,720
‫Y de esa manera nuestro tanque no podrá moverse.

37
00:03:00,720 --> 00:03:06,780
‫Y veo los garabatos rojos y eso es porque dije tank tanks, controlador de jugador en lugar de tune

38
00:03:06,780 --> 00:03:07,380
‫tanks.

39
00:03:07,830 --> 00:03:11,250
‫Entonces, al escribirlo correctamente ahora no recibo errores allí.

40
00:03:11,250 --> 00:03:13,690
‫Entonces, a continuación, debemos iniciar un temporizador.

41
00:03:13,710 --> 00:03:20,850
‫Ahora sabemos que los temporizadores implican el uso de un identificador de temporizador F y, de hecho, podemos crear un identificador de temporizador

42
00:03:20,850 --> 00:03:25,110
‫F en lugar de tener una variable miembro que pertenezca a la clase.

43
00:03:25,200 --> 00:03:31,470
‫Así que voy a seguir adelante y hacer eso y voy a llamar a este controlador de temporizador de activación del reproductor.

44
00:03:31,800 --> 00:03:38,340
‫Y a continuación, debemos configurar un temporizador ahora para la función de devolución de llamada para nuestro temporizador, me gustaría

45
00:03:38,340 --> 00:03:45,390
‫usar el estado habilitado del reproductor, pero el estado habilitado del reproductor es una función que requiere una entrada de tipo booleano.

46
00:03:45,990 --> 00:03:51,900
‫Ahora no hemos visto cómo configurar un temporizador usando una devolución de llamada que requiere parámetros de entrada.

47
00:03:51,900 --> 00:03:56,190
‫Esto implicará un nuevo concepto llamado delegado de temporizador.

48
00:03:56,190 --> 00:03:59,310
‫Así que echemos un vistazo al sistema de temporizador de Unreal Engine.

49
00:03:59,310 --> 00:04:07,080
‫Nuevamente, sabemos que hay un administrador de temporizador mundial que administra nuestros temporizadores y tiene una función de temporizador establecida.

50
00:04:07,170 --> 00:04:11,280
‫Ahora hay múltiples sobrecargas de la función de configuración del temporizador.

51
00:04:11,370 --> 00:04:13,410
‫Ya hemos visto uno de ellos.

52
00:04:13,440 --> 00:04:16,710
‫Ahora voy a hablar de otra versión de esta función.

53
00:04:16,710 --> 00:04:24,570
‫Y esta versión requiere un controlador de temporizador, una tasa de temporizador o un tiempo de retraso durante el cual debemos esperar antes de que se llame

54
00:04:24,570 --> 00:04:26,760
‫a nuestra función de devolución de llamada.

55
00:04:26,760 --> 00:04:32,550
‫Y en lugar de tomar la dirección de una función de devolución de llamada directamente, puede tomar algo llamado delegado

56
00:04:32,550 --> 00:04:33,270
‫de temporizador.

57
00:04:33,270 --> 00:04:40,440
‫Esta es una estructura de delegado de temporizador de tipo F, que nos permite crear un objeto que puede vincular una función

58
00:04:40,440 --> 00:04:41,490
‫directamente a él.

59
00:04:41,490 --> 00:04:45,600
‫Y los delegados del temporizador pueden vincular funciones que requieren parámetros de entrada.

60
00:04:45,600 --> 00:04:53,370
‫Ahora podemos crear una variable delegada del temporizador EF e inicializarla usando la función crear su objeto del delegado

61
00:04:53,370 --> 00:04:55,080
‫del temporizador f.

62
00:04:55,110 --> 00:05:00,990
‫Esto creará un nuevo delegado de temporizador y lo inicializará en función de lo que pasemos entre paréntesis.

63
00:05:00,990 --> 00:05:03,810
‫Esto tomará un objeto de usuario que es de.

64
00:05:03,860 --> 00:05:08,110
‫Por supuesto, la clase en la que existe nuestra función de devolución de llamada.

65
00:05:08,120 --> 00:05:15,110
‫Y luego toma la dirección de la función de devolución de llamada, seguida de cualquier valor de entrada que nos gustaría pasar

66
00:05:15,110 --> 00:05:18,450
‫a nuestra devolución de llamada una vez que se llame.

67
00:05:18,470 --> 00:05:24,830
‫Desde allí, podemos llamar al temporizador establecido desde el administrador de temporizador mundial y usar la sobrecarga que toma un delegado

68
00:05:24,830 --> 00:05:25,450
‫de temporizador.

69
00:05:25,460 --> 00:05:32,300
‫Esta sobrecarga requiere el controlador del temporizador, el delegado del temporizador, la velocidad de reproducción o un valor flotante que determina el

70
00:05:32,300 --> 00:05:38,630
‫retraso antes del cual se llamará a nuestra devolución de llamada, y luego un valor booleano para determinar si nuestro temporizador

71
00:05:38,630 --> 00:05:43,310
‫debe repetirse o no para que sepamos cómo crear un Delegado del temporizador F.

72
00:05:43,310 --> 00:05:49,610
‫Así que me gustaría que crearas uno en la función de inicio del juego handle dentro de nuestra nueva declaración if.

73
00:05:49,610 --> 00:05:54,200
‫Así que cree un delegado de temporizador f local y use el delegado de temporizador f.

74
00:05:54,200 --> 00:05:55,640
‫Crea tu objeto.

75
00:05:55,640 --> 00:06:01,610
‫Ahora vamos a necesitar pasar un objeto de usuario y, por lo general, lo hemos estado usando como objeto de

76
00:06:01,610 --> 00:06:05,870
‫usuario, pero la función que nos gustaría llamar existe en el controlador del reproductor.

77
00:06:05,870 --> 00:06:12,320
‫Por lo tanto, pase el controlador de reproductor de tanques de sintonía variable como la primera entrada que será el objeto de

78
00:06:12,320 --> 00:06:18,890
‫usuario y la función de devolución de llamada se establecerá en el estado habilitado para el reproductor, esa función que agregamos a nuestro

79
00:06:18,890 --> 00:06:20,300
‫controlador de reproductor personalizado.

80
00:06:20,300 --> 00:06:25,730
‫No olvide la dirección del operador y como tercera entrada vamos a pasar el valor.

81
00:06:25,730 --> 00:06:32,330
‫Cierto, esto es lo que se pasará al estado de configuración del reproductor habilitado cuando se llame a nuestra devolución de llamada

82
00:06:32,330 --> 00:06:33,590
‫al final del temporizador.

83
00:06:33,590 --> 00:06:36,710
‫Así que pausa el video y pruébalo ahora.

84
00:06:39,560 --> 00:06:46,580
‫Entonces, justo debajo de nuestro identificador de temporizador, voy a crear un delegado de temporizador F local y

85
00:06:46,580 --> 00:06:50,540
‫voy a llamar a este jugador habilitar delegado de temporizador.

86
00:06:51,140 --> 00:06:51,710
‫Esta bien.

87
00:06:51,710 --> 00:06:53,030
‫Si le pusiste otro nombre.

88
00:06:53,030 --> 00:07:00,200
‫Ahora voy a inicializar esto usando f timer, delegar, crear su objeto.

89
00:07:00,470 --> 00:07:06,590
‫Y esto primero tomará un objeto de usuario y ese será nuestro controlador de reproductor tune tanks.

90
00:07:06,590 --> 00:07:11,300
‫Así que voy a decir tune tanks player controller como la primera entrada.

91
00:07:11,390 --> 00:07:19,250
‫Y para el segundo, necesitamos nuestra función de devolución de llamada y será un reproductor de tanques de sintonía, el

92
00:07:19,910 --> 00:07:23,360
‫estado habilitado del reproductor configurado en el controlador.

93
00:07:23,360 --> 00:07:30,290
‫Y no puedo olvidar, necesito la dirección del operador para esta dirección de función y el valor que me gustaría pasar

94
00:07:30,290 --> 00:07:34,670
‫a esta función de devolución de llamada será verdadero de esa manera.

95
00:07:34,670 --> 00:07:41,120
‫Al final del tiempo de retraso, cuando esta devolución de llamada se llame verdadera, el valor se pasará a la función de

96
00:07:41,120 --> 00:07:42,290
‫devolución de llamada.

97
00:07:42,290 --> 00:07:48,770
‫Ahora estoy listo para llamar a set timer, lo que significa que necesito llamar a get world timer manager.

98
00:07:48,950 --> 00:07:51,530
‫Y luego, desde allí, puedo llamar a configurar el temporizador.

99
00:07:52,070 --> 00:07:59,030
‫Y la función de sobrecarga que estamos usando primero toma un controlador de temporizador y ese será el controlador de temporizador

100
00:07:59,060 --> 00:08:00,560
‫de activación del reproductor.

101
00:08:00,590 --> 00:08:04,370
‫La próxima entrada que voy a pasar será el delegado.

102
00:08:04,370 --> 00:08:08,630
‫Eso va a ser la activación del jugador, el delegado del temporizador.

103
00:08:10,130 --> 00:08:10,520
‫Próximo.

104
00:08:10,520 --> 00:08:16,700
‫Necesitamos nuestro tiempo de retraso y ese será el retraso de inicio, que es el flotante que acabamos de crear.

105
00:08:16,730 --> 00:08:20,120
‫Entonces, a continuación, paso el retraso de inicio.

106
00:08:20,990 --> 00:08:27,590
‫Y finalmente, no quiero que este temporizador se repita, así que voy a pasar falso para que no tengamos un comportamiento

107
00:08:27,590 --> 00:08:28,430
‫de bucle.

108
00:08:29,300 --> 00:08:33,020
‫Ahora voy a seguir adelante y sangrar estas entradas para que se vea bonito.

109
00:08:33,710 --> 00:08:38,690
‫Y ahora llamamos a set timer usando nuestro nuevo delegado de timer.

110
00:08:38,690 --> 00:08:45,380
‫Y al final de este tiempo de retraso, deberíamos hacer que nuestra función de devolución de llamada establezca el estado habilitado del jugador con

111
00:08:45,380 --> 00:08:51,440
‫el valor verdadero pasado ahora, ya que el retraso de inicio es de 3 segundos y estamos llamando a establecer el

112
00:08:51,440 --> 00:08:55,190
‫estado habilitado del jugador pasando en falso antes de configurar nuestro temporizador.

113
00:08:55,190 --> 00:09:00,920
‫Cuando presionamos reproducir, no deberíamos poder movernos hasta que termine este retraso de tres segundos.

114
00:09:00,920 --> 00:09:03,590
‫Así que vamos a compilar esto y ver cómo funciona.

115
00:09:04,100 --> 00:09:09,140
‫Así que voy a seguir adelante y presionar play y estoy tratando de moverme y no puedo.

116
00:09:09,140 --> 00:09:12,470
‫Y después de 3 segundos puedo moverme de repente.

117
00:09:12,500 --> 00:09:14,210
‫Y también mira esto.

118
00:09:14,240 --> 00:09:17,330
‫Observe que mi cursor es la cruz.

119
00:09:17,330 --> 00:09:23,000
‫Puede ser difícil de ver en la pantalla, pero debería poder verlo en su pantalla sin problemas.

120
00:09:23,000 --> 00:09:27,470
‫Y esto hace que sea mucho más fácil para mí apuntar y controlar mis tanques.

121
00:09:27,470 --> 00:09:28,820
‫Rotación de torreta.

122
00:09:29,210 --> 00:09:30,140
‫Perfecto.

123
00:09:30,140 --> 00:09:36,440
‫Entonces, en resumen, creamos una función de inicio de juego de manejo para el modo de juego y lo llamamos y

124
00:09:36,440 --> 00:09:37,370
‫comenzar a jugar.

125
00:09:37,580 --> 00:09:45,830
‫Y también configuramos un temporizador usando un delegado de temporizador en el que vinculamos nuestra función de estado habilitado del reproductor en el

126
00:09:45,830 --> 00:09:47,180
‫controlador del reproductor.

127
00:09:47,180 --> 00:09:53,810
‫Esto nos permitió tener una función de devolución de llamada para nuestro temporizador que toma parámetros de entrada y la usamos para habilitar

128
00:09:53,810 --> 00:09:58,340
‫la entrada del usuario después de un retraso de tres segundos cuando comienza el juego.

129
00:09:58,370 --> 00:10:03,470
‫Ahora bien, esto podría ser frustrante para un jugador si no tuviera algún tipo de señal visual que le

130
00:10:03,470 --> 00:10:05,690
‫permitiera saber que la entrada no está habilitada.

131
00:10:05,690 --> 00:10:08,150
‫Algo así como una cuenta atrás en la pantalla.

132
00:10:08,150 --> 00:10:10,640
‫Así que nos encargaremos de eso en futuros videos.

133
00:10:10,640 --> 00:10:12,410
‫Pero por ahora, enhorabuena.

134
00:10:12,410 --> 00:10:18,170
‫Ahora sabe cómo vincular una función que toma parámetros de entrada a un delegado de temporizador.

135
00:10:18,170 --> 00:10:19,640
‫Te veré en el próximo video.

