‫Bienvenido de nuevo.
‫Ahora tenemos un modo de juego y nos gustaría usarlo para determinar cuándo podemos iniciar el juego.
‫Ahora, algunos juegos tienen un retraso o un temporizador de cuenta regresiva que comienza cuando comienza el juego.
‫Y después de un período de tiempo determinado, el jugador puede mover el personaje o, en nuestro caso,
‫el tanque por el mundo.
‫Así que vamos a implementar eso en este video.
‫Esto implicará primero deshabilitar la entrada para que no podamos movernos cuando el juego comience por primera vez y
‫luego configuraremos un temporizador y después de un período de tiempo determinado, podremos habilitar la entrada.
‫Así que volvamos al modo de juego Tune Tanks y agreguemos un par de cosas aquí.
‫Primero, me gustaría agregar un flotador para la cantidad de tiempo que debe pasar cuando comienza el juego antes de que
‫podamos comenzar a movernos.
‫Entonces, este flotador se llamará retraso de inicio y lo inicializaré en tres puntos F para que tengamos que esperar
‫3 segundos antes de que podamos comenzar el juego.
‫Ahora, tan pronto como comience el juego, me gustaría iniciar este temporizador, lo que significa que me gustaría una función que
‫inicie este temporizador, y también voy a hacer que esta sea una función privada.
‫Voy a hacer de esto una función nula llamada manejar el inicio del juego.
‫Ahora puedo implementar manejar el inicio del juego en el modo de juego tune tanks.
‫Baje aquí debajo de comenzar a jugar.
‫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
‫del juego.
‫Ahora, el lugar para llamar a esto sería Begin Play.
‫Dado que Begin Play se llama al comienzo del juego.
‫Así que voy a llamar a manejar el juego, comenzar aquí y comenzar a jugar.
‫Y dado que estamos haciendo un par de cosas aquí al comienzo del juego donde configuramos
‫el tanque y los tanques de sintonización, el jugador, las variables del controlador, me gustaría moverlos al inicio del juego.
‫Así que voy a moverlos directamente hacia abajo para manejar el inicio del juego y de esa manera se configurará el
‫controlador de jugador tank y tune tanks ya que estamos llamando handle game start aquí y comenzar a jugar.
‫Así que aquí es donde me gustaría iniciar un temporizador de cuenta regresiva después del cual podemos habilitar la entrada del usuario.
‫Ahora, antes de iniciar el temporizador, voy a desactivar la entrada para que no podamos mover el tanque todavía.
‫Y eso va a requerir nuestra función.
‫Colocamos aquí en tanques de sintonía, el controlador del jugador llamado establecer el estado habilitado del jugador.
‫Y eso significa que voy a usar tune tanks, controlador de jugador.
‫Y si voy a usar el controlador de jugador de tune tank, es una buena idea asegurarse de que sea válido.
‫Así que voy a decir if tune tanks, player, controller y si llegamos al
‫interior de esta declaración if, entonces puedo tomar tune tanks, player controller y llamar al estado habilitado del reproductor y pasar falso.
‫Y de esa manera nuestro tanque no podrá moverse.
‫Y veo los garabatos rojos y eso es porque dije tank tanks, controlador de jugador en lugar de tune
‫tanks.
‫Entonces, al escribirlo correctamente ahora no recibo errores allí.
‫Entonces, a continuación, debemos iniciar un temporizador.
‫Ahora sabemos que los temporizadores implican el uso de un identificador de temporizador F y, de hecho, podemos crear un identificador de temporizador
‫F en lugar de tener una variable miembro que pertenezca a la clase.
‫Así que voy a seguir adelante y hacer eso y voy a llamar a este controlador de temporizador de activación del reproductor.
‫Y a continuación, debemos configurar un temporizador ahora para la función de devolución de llamada para nuestro temporizador, me gustaría
‫usar el estado habilitado del reproductor, pero el estado habilitado del reproductor es una función que requiere una entrada de tipo booleano.
‫Ahora no hemos visto cómo configurar un temporizador usando una devolución de llamada que requiere parámetros de entrada.
‫Esto implicará un nuevo concepto llamado delegado de temporizador.
‫Así que echemos un vistazo al sistema de temporizador de Unreal Engine.
‫Nuevamente, sabemos que hay un administrador de temporizador mundial que administra nuestros temporizadores y tiene una función de temporizador establecida.
‫Ahora hay múltiples sobrecargas de la función de configuración del temporizador.
‫Ya hemos visto uno de ellos.
‫Ahora voy a hablar de otra versión de esta función.
‫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
‫a nuestra función de devolución de llamada.
‫Y en lugar de tomar la dirección de una función de devolución de llamada directamente, puede tomar algo llamado delegado
‫de temporizador.
‫Esta es una estructura de delegado de temporizador de tipo F, que nos permite crear un objeto que puede vincular una función
‫directamente a él.
‫Y los delegados del temporizador pueden vincular funciones que requieren parámetros de entrada.
‫Ahora podemos crear una variable delegada del temporizador EF e inicializarla usando la función crear su objeto del delegado
‫del temporizador f.
‫Esto creará un nuevo delegado de temporizador y lo inicializará en función de lo que pasemos entre paréntesis.
‫Esto tomará un objeto de usuario que es de.
‫Por supuesto, la clase en la que existe nuestra función de devolución de llamada.
‫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
‫a nuestra devolución de llamada una vez que se llame.
‫Desde allí, podemos llamar al temporizador establecido desde el administrador de temporizador mundial y usar la sobrecarga que toma un delegado
‫de temporizador.
‫Esta sobrecarga requiere el controlador del temporizador, el delegado del temporizador, la velocidad de reproducción o un valor flotante que determina el
‫retraso antes del cual se llamará a nuestra devolución de llamada, y luego un valor booleano para determinar si nuestro temporizador
‫debe repetirse o no para que sepamos cómo crear un Delegado del temporizador F.
‫Así que me gustaría que crearas uno en la función de inicio del juego handle dentro de nuestra nueva declaración if.
‫Así que cree un delegado de temporizador f local y use el delegado de temporizador f.
‫Crea tu objeto.
‫Ahora vamos a necesitar pasar un objeto de usuario y, por lo general, lo hemos estado usando como objeto de
‫usuario, pero la función que nos gustaría llamar existe en el controlador del reproductor.
‫Por lo tanto, pase el controlador de reproductor de tanques de sintonía variable como la primera entrada que será el objeto de
‫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
‫controlador de reproductor personalizado.
‫No olvide la dirección del operador y como tercera entrada vamos a pasar el valor.
‫Cierto, esto es lo que se pasará al estado de configuración del reproductor habilitado cuando se llame a nuestra devolución de llamada
‫al final del temporizador.
‫Así que pausa el video y pruébalo ahora.
‫Entonces, justo debajo de nuestro identificador de temporizador, voy a crear un delegado de temporizador F local y
‫voy a llamar a este jugador habilitar delegado de temporizador.
‫Esta bien.
‫Si le pusiste otro nombre.
‫Ahora voy a inicializar esto usando f timer, delegar, crear su objeto.
‫Y esto primero tomará un objeto de usuario y ese será nuestro controlador de reproductor tune tanks.
‫Así que voy a decir tune tanks player controller como la primera entrada.
‫Y para el segundo, necesitamos nuestra función de devolución de llamada y será un reproductor de tanques de sintonía, el
‫estado habilitado del reproductor configurado en el controlador.
‫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
‫a esta función de devolución de llamada será verdadero de esa manera.
‫Al final del tiempo de retraso, cuando esta devolución de llamada se llame verdadera, el valor se pasará a la función de
‫devolución de llamada.
‫Ahora estoy listo para llamar a set timer, lo que significa que necesito llamar a get world timer manager.
‫Y luego, desde allí, puedo llamar a configurar el temporizador.
‫Y la función de sobrecarga que estamos usando primero toma un controlador de temporizador y ese será el controlador de temporizador
‫de activación del reproductor.
‫La próxima entrada que voy a pasar será el delegado.
‫Eso va a ser la activación del jugador, el delegado del temporizador.
‫Próximo.
‫Necesitamos nuestro tiempo de retraso y ese será el retraso de inicio, que es el flotante que acabamos de crear.
‫Entonces, a continuación, paso el retraso de inicio.
‫Y finalmente, no quiero que este temporizador se repita, así que voy a pasar falso para que no tengamos un comportamiento
‫de bucle.
‫Ahora voy a seguir adelante y sangrar estas entradas para que se vea bonito.
‫Y ahora llamamos a set timer usando nuestro nuevo delegado de timer.
‫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
‫el valor verdadero pasado ahora, ya que el retraso de inicio es de 3 segundos y estamos llamando a establecer el
‫estado habilitado del jugador pasando en falso antes de configurar nuestro temporizador.
‫Cuando presionamos reproducir, no deberíamos poder movernos hasta que termine este retraso de tres segundos.
‫Así que vamos a compilar esto y ver cómo funciona.
‫Así que voy a seguir adelante y presionar play y estoy tratando de moverme y no puedo.
‫Y después de 3 segundos puedo moverme de repente.
‫Y también mira esto.
‫Observe que mi cursor es la cruz.
‫Puede ser difícil de ver en la pantalla, pero debería poder verlo en su pantalla sin problemas.
‫Y esto hace que sea mucho más fácil para mí apuntar y controlar mis tanques.
‫Rotación de torreta.
‫Perfecto.
‫Entonces, en resumen, creamos una función de inicio de juego de manejo para el modo de juego y lo llamamos y
‫comenzar a jugar.
‫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
‫controlador del reproductor.
‫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
‫la entrada del usuario después de un retraso de tres segundos cuando comienza el juego.
‫Ahora bien, esto podría ser frustrante para un jugador si no tuviera algún tipo de señal visual que le
‫permitiera saber que la entrada no está habilitada.
‫Algo así como una cuenta atrás en la pantalla.
‫Así que nos encargaremos de eso en futuros videos.
‫Pero por ahora, enhorabuena.
‫Ahora sabe cómo vincular una función que toma parámetros de entrada a un delegado de temporizador.
‫Te veré en el próximo video.