‫Hola y bienvenido de nuevo.
‫En este video, vamos a hablar sobre cómo podemos acelerar nuestro tanque.
‫Nos gustaría controlar exactamente qué tan rápido se mueve nuestro tanque.
‫Y en este momento solo estamos pasando este vector de ubicación delta a un acto adicional, un desplazamiento local, y
‫no tenemos control sobre qué tan rápido se mueve el tanque.
‫En realidad se está moviendo bastante lento.
‫Así que vamos a crear una variable de velocidad que podamos usar para controlar esa velocidad.
‫Y también vamos a tener en cuenta la velocidad de fotogramas de nuestro juego, ya que nuestro juego cambia la velocidad de fotogramas de un
‫fotograma a otro.
‫En realidad, no estamos obteniendo un movimiento constante.
‫Entonces, para tener en cuenta esa velocidad de fotogramas, vamos a hablar de algo llamado Delta Time.
‫Así que estamos aquí en el editor y si presiono reproducir y empiezo a mover el tanque, no
‫es algo que puedas notar necesariamente.
‫Pero nuestro tanque no se mueve a un ritmo constante de cuadro a cuadro.
‫Y la razón es que nuestra velocidad de fotogramas cambia y aquí arriba, en la parte superior izquierda de la ventana gráfica, hay
‫un pequeño menú desplegable.
‫Si hago clic en eso, hay una casilla de verificación al lado para mostrar DPS PES significa fotogramas por segundo.
‫Si marco esto, en la parte superior derecha veo mis fotogramas por segundo.
‫Y justo debajo de eso, ¿cuántos milisegundos han pasado desde el último cuadro?
‫Y estos valores cambian de fotograma a fotograma.
‫Si pulsé reproducir, es posible que te lo hayas perdido, pero la velocidad de fotogramas bajó y luego volvió a
‫subir porque durante esa etapa inicial del juego, estaban sucediendo muchas cosas.
‫Todos los actores estaban llamando a sus funciones de inicio de juego y hay algunas configuraciones detrás de escena para
‫el mundo.
‫Ahora, si empiezo a jugar, las 120 aplicaciones que obtengo cambian de cuadro a cuadro,
‫aunque rondan las 120.
‫Entonces, la razón por la que esto causa un movimiento inconsistente es porque a medida que la velocidad de fotogramas disminuye, esas actualizaciones
‫de ticks se llaman con menos frecuencia.
‫Y si estamos moviendo este tanque en la misma cantidad en cada cuadro, entonces dependemos de esa velocidad de
‫cuadros para mantener la coherencia, para obtener ese movimiento constante.
‫Y cuando el juego se vuelve más complicado, las variaciones de velocidad de fotogramas van a empeorar cada vez más.
‫Entonces, debemos asegurarnos de que nos estamos ajustando a eso usando algo llamado Delta Time.
‫Entonces, ¿qué es este misterioso tiempo Delta?
‫Bueno, digamos que tenemos esta línea de tiempo aquí comenzando en 0 segundos y aumentando a medida que pasa el tiempo.
‫Ahora, a medida que pasa el tiempo, esto significa que se está llamando a la función de tic.
‫Pero observe que la función tick no es muy consistente.
‫A veces se llama muy rápidamente ya veces se llama con menos frecuencia.
‫Esto se debe a que su computadora debe hacer cálculos cuadro por cuadro y, a veces, esos
‫cálculos consumen más recursos de su computadora, y eso puede ralentizar nuestra velocidad de cuadros.
‫Ahora, esta variable de tiempo delta que tenemos en la función de tic es la cantidad de tiempo que
‫pasó desde el último cuadro.
‫Así que aquí puede ser 0. 1 segundo
‫Realmente depende del uso de la CPU y cómo varía.
‫Entonces, a medida que varía el uso de su CPU, su tiempo delta también variará.
‫Y esto significa que cuando tenemos más fotogramas por segundo, tenemos más llamadas a funciones.
‫Ahora bien, si estamos llamando a la compensación local de agregar actor con más frecuencia, entonces veremos que nuestro estanque se mueve más
‫rápido y no tendrá una tasa de movimiento constante.
‫Entonces, la solución es escalar el movimiento por tiempo Delta.
‫Entonces, si el tiempo Delta es 0. 1 y queremos mover nuestro estanque, digamos,
‫diez centímetros por segundo, escalando ese movimiento en 0. 1 segundo nos da la cantidad exacta de movimiento que necesitamos para un tiempo de actualización de
‫cuadro de 0. 1 segundo
‫Ahora considere esta parte aquí donde tenemos un tiempo delta más pequeño, lo que significa que se llama a TIC con
‫más frecuencia.
‫Digamos que el tiempo delta aquí es 0. 0 1 segundos.
‫Así que aquí se llama a TIC diez veces más a menudo.
‫Bueno, podríamos simplemente escalar nuestro movimiento en 0. 01 para este marco en particular, y de esa manera moveremos
‫nuestro estanque diez centímetros por segundo veces, 0. 0 1 segundos.
‫Por lo tanto, estamos moviendo el charco un poco, ya que se llama a TIC con mucha más frecuencia.
‫Hacer esto asegura que nuestro estanque se moverá de manera consistente independientemente de los cambios en la velocidad de
‫fotogramas.
‫Entonces, de vuelta aquí en el código VSE, pensemos en cómo nos gusta solucionar este problema.
‫Tenemos nuestro vector de ubicación delta y estamos configurando su x igual al valor, pero sabemos que nos gustaría escalar
‫el valor por el tiempo delta.
‫Así que solo voy a poner un pequeño comentario aquí y decir que X es igual al valor por el tiempo delta, lo que significa que nos gustaría escalar
‫el valor por el tiempo delta.
‫Ahora, una vez que hagamos esto, vamos a hacer que el valor sea muy pequeño porque el tiempo Delta en sí mismo es
‫un valor muy pequeño, especialmente si su velocidad de fotogramas es muy alta.
‫Así que también vamos a tener que escalar esto en algo.
‫De lo contrario, una especie de variable de velocidad, y podemos decidir cuál debería ser este valor para controlar la velocidad
‫de los tanques.
‫Así que tenemos un poco de pseudocódigo aquí para guiarnos y ahora solo necesitamos implementar esto creando un
‫valor para la velocidad y descubriendo cómo podemos obtener este valor de tiempo delta.
‫Así que hablemos de cómo podemos acceder al tiempo Delta desde la función de movimiento.
‫Ahora, Unreal Engine tiene varias formas de controlar la hora Delta.
‫De hecho, si observa la función de tic que tenemos en base a Delta, el tiempo es un parámetro de entrada flotante.
‫Entonces, si estamos trabajando en la función de tic, ya tenemos acceso a la hora Delta, pero en el DHCP del
‫tanque, nuestra función de movimiento no tiene ese parámetro de entrada, pero el motor irreal tiene sus formas.
‫Una forma es acceder a una función llamada obtener segundos delta mundiales, que existe en una clase llamada estáticas de
‫juego U.
‫Como sugiere el nombre, la estática del juego tiene muchas funciones estáticas que ayudan en la programación del juego.
‫Obtener los segundos Delta mundiales devuelve la hora delta.
‫Ahora tiene un parámetro de entrada.
‫Aquí toma un objeto de contexto mundial.
‫Verás esto mucho en Unreal Engine.
‫Muchas funciones estáticas requerirán un objeto de contexto mundial.
‫El mundo es un objeto de tipo mundo.
‫Es el objeto de nivel superior de nuestro juego.
‫Representa nuestro mapa que contiene todos los objetos asociados en nuestro juego.
‫Ahora las funciones estáticas como obtener segundos delta mundiales no tienen idea de en qué mundo estamos.
‫Necesitamos decirle a esta función en qué mundo estamos para que pueda acceder a ese mundo y obtener ese valor de
‫tiempo delta.
‫Ahora, para decirle en qué mundo estamos, podemos pasar un puntero a un objeto que existe en
‫ese mundo.
‫Mientras trabajamos en la clase de tanque, podemos pasar la palabra clave this.
‫Esta es una palabra clave que podemos usar dentro de cualquier clase en C++.
‫Esta palabra clave es un puntero a la instancia de cualquier objeto en particular en el que estamos trabajando.
‫Entonces, si estamos trabajando en la clase de tanque, este es un puntero al tanque en el que estamos.
‫Entonces, las funciones que requieren un objeto de contexto mundial a menudo pueden recibir esto como parámetro de entrada porque el tanque en
‫el que estamos trabajando existe en el mundo correcto.
‫Entonces, obtener segundos delta mundiales sabrá en qué mundo está y puede recuperarnos el delta apropiado.
‫Tiempo para ese mundo.
‫Entonces, si estamos llamando a obtener segundos delta mundiales desde dentro de la clase --, vamos a pasar esto
‫como el objeto de contexto mundial.
‫Así que ahora tiene todas las herramientas que necesita para controlar la velocidad de los tanques.
‫Entonces, lo que vas a hacer es crear una variable de velocidad, convertirla en un flotador y colocarla en una
‫sección privada en la clase de tanque.
‫Ahora exponga esto a planos para que podamos ajustarlo a medida que lo desarrollamos, lo
‫que significa que le dará una propiedad y utilizará los especificadores de propiedad apropiados que correspondan al nivel
‫de exposición que le gustaría.
‫Ahora, en la función MOV, tenemos ese fragmento de pseudocódigo que colocamos como comentario.
‫Así que úsalo como guía.
‫Vas a tomar la ubicación delta, el vector F y la escala.
‫Es X por tiempo delta.
‫Acabamos de ver cómo podemos acceder al tiempo delta usando las estáticas de juego U.
‫Y también vas a escalar X por la variable de velocidad.
‫Ahora, debido a que estamos usando una función en las estadísticas del juego, deberá incluir el archivo de encabezado
‫para las estadísticas del juego.
‫Ahora le he mostrado varias veces cómo encuentro la inclusión para una clase en particular usando la documentación
‫del motor irreal.
‫Así que voy a desafiarte a que busques tus estadísticas de juego en la documentación de Unreal Engine y
‫encuentres ese archivo de encabezado.
‫Y si no puede encontrarlo, simplemente busque el enlace en los recursos de este video, que le dará
‫la documentación para sus estadísticas de juego, pero intente encontrarlo por su cuenta.
‫Primero pausa el video y controla la velocidad del tanque ahora.
‫Bueno.
‫Así que tengo mi pseudocódigo para guiarme y necesito escalar el valor por tiempo delta y por velocidad.
‫Así que primero voy a crear mi variable de velocidad.
‫Ahora de vuelta en el tanque h.
‫Aquí es donde puedo colocar la variable de velocidad.
‫Sin embargo, si recuerda un ejercicio de práctica en una conferencia anterior, agregué un flotador llamado Speed a la
‫clase Base Pond.
‫Ahora no necesito la variable de velocidad aquí en el estanque base.
‫Esto fue solo práctica, así que realmente no lo necesito aquí.
‫De hecho, no necesito estos otros 30 dos que creé para demostrar que ustedes son especificadores de propiedades.
‫Así que voy a resaltar todos estos y eliminarlos de la clase de estanque base.
‫ya no los quiero
‫Así que se han ido.
‫Ahora, también puede recordar que hice referencia a esa variable de velocidad en el plano del tanque del estanque.
‫Así que voy a abrir el tanque del estanque de BP.
‫Y aquí en el gráfico de eventos, está esa variable de velocidad a la que hice referencia.
‫Como ya no necesito esto, continuaré y eliminaré esos nodos y compilaré y guardaré mi tanque
‫de estanque BP.
‫Bueno.
‫Después de limpiar todo eso, volveré al tanque para agregar mi variable de velocidad.
‫Y esto va a estar en la sección privada aquí.
‫Voy a agregarlo justo encima de la función de movimiento y será un flotador llamado velocidad.
‫Ahora voy a darle un valor inicial aquí.
‫Creo que probaré 200 F y veré cómo funciona.
‫Pero como me gustaría poder editar esto en el editor mientras estoy desarrollando, obtendrá una nueva macro de
‫propiedad y me gustaría poder editar esto en instancias y de forma predeterminada.
‫Así que voy a hacer que se edite en cualquier lugar.
‫Ahora, no tenías que hacer esto, pero le estoy dando una categoría.
‫Crearé una nueva categoría llamada movimiento.
‫Ahora exponerlo al gráfico de eventos es opcional.
‫Voy a posponer eso porque no creo que necesite acceder a él en el gráfico de eventos.
‫Si necesito
‫En el futuro, puedo exponerlo con blueprint, lectura, escritura o blueprint de solo lectura y usar esa meta para
‫permitir el acceso privado especificado.
‫Pero por ahora no voy a hacerlo.
‫Así que tengo una variable de velocidad y aquí en el DHCP del tanque, voy a tomar valor y escalarlo por velocidad.
‫Ahora, lo último que queda por hacer es escalar el valor por tiempo delta, lo que significa que necesito tus estadísticas de juego.
‫Así que aquí está la documentación de Unreal Engine.
‫Voy a seguir adelante y buscar sus estadísticas de juego y aquí están sus estadísticas de juego.
‫Así que solo necesito desplazarme hacia abajo hasta la línea de inclusión y copiar esto y volver al CP del tanque.
‫Puedo pegarlo.
‫Ahora que tengo acceso a nuevas estadísticas de juego, puedo obtener tiempo Delta, así que lo multiplicaré por ti.
‫Las estadísticas del juego obtienen segundos delta mundiales y, como vimos, esto necesita un objeto de contexto mundial.
‫Incluso puede ver con la ventana emergente que está solicitando un objeto de contexto mundial.
‫Así que voy a pasar en esto.
‫Entonces, ahora que estoy configurando las ubicaciones Delta X para que valoren los tiempos, la velocidad, los tiempos, el tiempo delta, voy a
‫compilar esto.
‫Así que tenemos una compilación exitosa.
‫Así que de vuelta aquí en el editor, puedo ir a BP Pond Tank y allí está mi velocidad.
‫Y si selecciono la instancia del tanque en el mundo, puedo buscar en el panel de detalles el movimiento y ahí
‫está la velocidad y puedo configurarla en cualquier valor que desee.
‫Si subo esto y presiono reproducir, entonces me estoy moviendo un poco más rápido.
‫Así que esta es la ventaja de exponer la variable a planos.
‫Puedo experimentar y encontrar una buena velocidad que funcione para mí.
‫Muy bien, eso se ve genial.
‫Voy a seguir adelante y dejar de mostrar el FPSO ahora.
‫Y ahora tenemos nuestra variable de velocidad y podemos cambiarla.
‫Y ese cambio se verá reflejado en el movimiento de mi peón.
‫Así que ahora estamos controlando la velocidad de movimiento de nuestro tanque y tenemos una buena variable de
‫velocidad que exponemos a los planos y podemos configurarla mientras desarrollamos un experimento con su valor.
‫También aprendimos sobre el tiempo delta y por qué es importante escalar nuestro movimiento según el tiempo delta.
‫Por lo tanto, es independiente de la velocidad de fotogramas, ya que los cambios en la velocidad de fotogramas aún obtendrán un movimiento suave y consistente
‫con nuestro tanque.
‫Entonces, mirando hacia atrás en nuestro plan de sección, casi hemos terminado con nuestro primer punto.
‫Hemos creado un tanque y puede moverse por todo el mundo.
‫Nuestro segundo punto es manejar la entrada con el movimiento del teclado WASD y la entrada del mouse también.
‫Tenemos esa parte W y SW hacia abajo, pero aún necesitamos poder usar las teclas A y D y
‫las usaremos para rotar el tanque.
‫Así que estamos haciendo un buen progreso en los próximos videos.
‫Trabajaremos para terminar nuestra capacidad de mover el tanque.
‫Te veré pronto.