El tiempo es una medida esencial en los sistemas físicos.
Y hasta finales de la década de 1960, se definía en términos del giro de la Tierra.
Pero como la Tierra se ha ido desacelerando cada año, esta línea de base ya no es lo suficientemente precisa para
los científicos.
Hoy en día, el tiempo medido en segundos, se basa en la duración de la rotación de un átomo radiactivo.
El tiempo es una mecánica fundamental utilizada en los juegos.
No sólo se presenta al jugador para los desafíos, sino que también se utiliza para todo, desde el movimiento
de objetos, el cálculo de la física, la sincronización de redes y la escritura de sombreadores.
Con respecto a la programación de la inteligencia artificial, el tiempo se utiliza para mover a los personajes
por un entorno y sincronizar los movimientos, las transiciones y alinearlos con las animaciones.
También es la medida básica que aparece en todos los cálculos de física.
En esta conferencia, vamos a echar un vistazo a cómo los motores de juegos, en particular unity, trabajan
con el tiempo y los diferentes tipos de tiempo que hay el tiempo en un juego de ordenador proviene de numerosas fuentes.
Por supuesto, está el propio reloj del ordenador, y luego está el propio motor, que también ejecuta ciclos que no se basan
en el tiempo real, sino en la capacidad de procesamiento de tu ordenador.
Estarás familiarizado con el método de actualización de Unity.
Se ejecuta una vez por fotograma.
La rapidez con la que se ejecuta depende del sistema operativo de su hardware y de la carga que tenga su ordenador.
Si intentas utilizar la actualización como base para el tiempo real en un juego, entonces tu juego se ejecutará a diferentes
velocidades en diferentes ordenadores.
Unity también tiene un método de actualización tardía.
Esto también se ejecuta una vez por fotograma, pero después de las actualizaciones de la animación.
Luego está la actualización fija.
Esto ocurre en el ciclo de la física y puede ejecutarse más de una vez por fotograma.
Y por último, pero no menos importante, está el bucle de la interfaz gráfica de usuario.
También puede ejecutarse varias veces por cuadro.
Por supuesto, hay mucho más entre estos bucles y hay una gran documentación en
el Manual de Unity que lo ilustra.
Realmente merece la pena echarle un vistazo, pero lo que más nos interesa para trabajar con nuestra IA son la actualización
fija, la actualización y la actualización tardía.
El uso de uno u otro dependerá de lo que se quiera conseguir.
Pero mi objetivo en esta conferencia es examinar las diferentes velocidades a las que se ejecutan
e idear una forma de mover una IA en tiempo real.
Así que para investigar cada uno de estos bucles, lo que me gustaría que hicieras es crear un nuevo proyecto
unity y traer el archivo de Stata, que va con esta conferencia.
En ella, cuando abres la escena del tiempo, así que esta de aquí atrás, encontrarás que hay cuatro átomos aquí.
Así que este es el activo de la unidad del modelo del átomo.
Una se llama átomo de actualización, otra átomo de retraso, otra átomo fijo y otra átomo de segundos.
Si echas un vistazo a cada uno de ellos por separado, también te darás cuenta de que tienen diferentes guiones.
Así que vamos a utilizar esos scripts para investigar los diferentes bucles y la actualización.
Así que Update Atom tiene update move late Atom tiene late update move fixed atom tiene fixed update move y seconds atom tiene
seconds update, que no es realmente un bucle, pero hablaremos de eso un poco más tarde.
Para empezar, sin embargo, vamos a abrir el script de movimiento de actualización que se adjunta a la actualización Atom.
Así que esos scripts están en la carpeta de scripts.
Vamos a abrir la actualización de movimiento en.
Aquí está el bucle básico de actualización.
No pasa nada en absoluto.
Lo que queremos hacer es mover nuestro personaje a lo largo de su eje Z.
Así que ese es el eje orientado hacia adelante.
Hemos estado trabajando con el movimiento de nuestros personajes desde el principio prácticamente de este curso.
Así que si usted hace clic en uno de los átomos o tomemos ese, pulse la tecla W, le mostrará la orientación de
eso.
Así que usted puede ver que estamos trabajando con el eje Z, el eje azul para empujar hacia adelante aquí.
Así que en el movimiento de actualización, vamos a traducir nuestro carácter a lo largo de la Z.
Bien, entonces esta transformación de puntos se traduce y añadiremos cero en la X, cero en la Y y 0. 01 F en la Z.
De acuerdo.
Así que cada actualización, se va a mover a lo largo de su eje Z en 0. 01 cada vez.
Así que guarda eso.
Volvamos a la unidad y pulsemos el play para ver qué obtenemos.
Las animaciones que hay en todos estos personajes se van a reproducir automáticamente.
No los hundimos con ningún movimiento ni nada que esté ahí por un simple efecto.
Bien, ahora puedes ver que esta primera actualización Atom se mueve bastante bien en la vista del juego.
Tengo una vista de arriba hacia abajo para que podamos comparar las velocidades y los movimientos de estos diferentes
tipos a medida que avanzamos.
Bien, ahora vamos a utilizar el mismo código en la actualización fija y en la actualización tardía.
Así que voy a copiar esto fuera de la actualización de movimiento y vamos a ir a la actualización fija y el uso que en allí
y luego la actualización tardía y el uso que en allí.
Ahora bien, si cada una de estas actualizaciones se ejecuta a la misma velocidad, entonces los átomos se moverán todos juntos.
Si no lo hacen, entonces notarás que hay un retraso o un átomo más rápido.
Asegúrate de que guardas todo esto y volvamos a echarle un vistazo.
Así que la actualización del átomo está en la parte inferior.
Este de aquí, entonces tenemos tarde.
Adán y Adán fijo.
Veamos los resultados de esto.
Así que cuando empiezan a moverse.
Lo que vas a encontrar es que se obtiene en este caso, el Adán fijo es realmente caminar más rápido.
Así que estos aquí, esta es la actualización.
Adam, sabemos que se ejecuta una vez por fotograma y puedes ver que el último Adam también se ejecuta una vez por fotograma.
La única manera de que este tipo de Adán fijo pueda estar por delante es que su actualización fija se ejecuta más
de una vez por cuadro, lo que en realidad le da más oportunidad de añadir más traducciones que estos otros
dos.
De acuerdo.
Así que ahora echemos un vistazo a los segundos.
Adam lo que vamos a hacer es usar el reloj del ordenador para mover este átomo.
Lo que ocurre con estos otros átomos es que se ejecutan esas actualizaciones tan rápido como tu ordenador puede hacerlo,
básicamente.
Así que en otro equipo, estos tipos posiblemente estarían corriendo más rápido o podrían ir más lento,
dependiendo de lo que sea.
Por lo tanto, no tienes un movimiento consistente entre tus personajes y eso es muy importante para la
experiencia del jugador.
Si usamos el reloj de tu ordenador para mover algo en, digamos, metros por segundo, que es una medida muy común
en los sistemas de física, entonces va a ser en metros por sí mismo, pero va a ser la misma tasa
de movimiento sin importar en qué ordenador lo ejecutes.
Así que vayamos a nuestra actualización de segundos y modifiquemos este código para que se mueva usando el reloj.
En primer lugar, voy a añadir un par de variables.
Lo que tenemos que hacer es llevar la cuenta de cuándo empieza nuestra actualización para poder quitar cualquier tipo de ticks que
hayan ocurrido antes de llegar a este punto y no utilizar esos ticks.
Así que eso va a ser nuestro tipo de desplazamiento de inicio de tiempo es igual a cero.
Y entonces sólo hay que configurarlo una vez.
Y voy a crear un bool aquí, no un float.
Así que el bool se puso en marcha.
El tiempo es falso.
Así que Unity tiene una medida para decirnos cuánto tiempo nuestra aplicación ha estado realmente en funcionamiento, pero necesitamos saber cuándo
esta actualización realmente ocurrió para que la aplicación pudiera haber comenzado a funcionar.
Y luego, 5 segundos después, por ejemplo, comenzó esta actualización.
Queremos asegurarnos de deshacernos de esos 5 segundos iniciales.
Así que aquí, si no tiene hora de inicio.
Entonces.
El tiempo de inicio establecido es igual al tiempo real de inicio del sentido y luego estableceremos que el tiempo de inicio es igual a true para que no retroceda dentro
de esa declaración if, entonces usaremos este tiempo para mover realmente a nuestro personaje.
Así que esta posición de punto de transformación de punto, estamos estableciendo la posición porque esto es tictac.
Así que se está haciendo más y más grande y más grande cuanto más tiempo se ejecuta esta aplicación.
Así que no queremos seguir traduciéndolo porque sería como una especie de traducción exponencial
y movería demasiado al personaje.
Así que estamos usando la posición para actualizar eso.
Así que nuevo vector tres.
El primero será el valor x actual de este personaje.
Así que transforma la posición del punto x, entonces queremos que la Y sea la misma.
Así que este punto transforma la posición punto y y el valor z será el tiempo punto real desde el inicio menos nuestro
tiempo de inicio.
Desplazamiento.
De acuerdo.
Sí.
Así que guarda eso.
Volvamos a Unity Press play y echemos un vistazo.
Y ahora este personaje caminará realmente en metros por segundo.
No importa en qué ordenador lo pongas, va a funcionar a la misma velocidad porque está utilizando
el tiempo real.
Y a partir de esto, ahora se puede ver claramente que estos otros bucles de actualización no son una especie de sincronización
con el tiempo real.
Es sólo la velocidad de tu ordenador.
Mientras que este otro tipo que ahora se sale de cuadro va a un ritmo de metros por segundo constante.
De acuerdo.
Así que esa es una demostración de los diferentes tiempos que se dan en una aplicación.
Y lo que nos esforzamos es ser más como este tipo aquí en los segundos donde es más preciso con
el reloj.
Por suerte para nosotros, la unidad proporciona algunas grandes herramientas y, de hecho, ya las hemos visto
en conferencias anteriores y podrías, ya sabes, devanarte los sesos y ver si puedes recordar lo que era
conseguir que estos tipos se movieran consistentemente dentro de esos bucles.
Cuando volvamos en el próximo vídeo, lo pondremos en práctica y compararemos el movimiento
de todos estos personajes.