Estoy planeando el desarrollo de un juego en Unity3D, y estoy tratando de aceptar lo que el motor ya ha proporcionado y lo que debo codificar.
El juego en sí será un juego de ritmo, lo que significa sincronizar audio y eventos gráficos para que siempre jueguen cuando se supone que deben hacerlo. Lo que estoy buscando evitar es un posible escenario de retraso en el que el audio o los gráficos comienzan a progresar más rápido que el otro.
Cuando discutimos este tipo de sistema de coordinación en mi clase de diseño de juegos en la universidad, mi profesor llamó a este tipo de diseño una clase de "Línea de tiempo". La idea es que puede crear una instancia de uno o más de estos para progresar a diferentes velocidades, programar cosas que sucederán en el futuro y sincronizar eventos periódicos. Sin embargo, llamar a esto una clase de "Línea de tiempo" parece haberse limitado a mi propio profesor, ya que buscar en Google si ciertas características de API tienen la funcionalidad "Línea de tiempo" ha sido un esfuerzo infructuoso.
¿Hay algún nombre más común para este tipo de funcionalidad? ¿Tiene Unity algún método preexistente para coordinar la programación de eventos como este, o es este el tipo de cosas que deben integrarse en el motor? Y si es así, ¡agradecería que me señalaran algunos tutoriales!
fuente
Respuestas:
Si bien esta funcionalidad no está disponible en Unity, una implementación básica de dicha línea de tiempo no debería ser demasiado difícil de hacer.
Así es como lo haría:
timeline.AddEvent(0.25f, MyCallback)
.Con cada
Update
, la clase de línea de tiempo:float
) por el tiempo transcurridoSi necesita algún tipo de funcionalidad de rebobinado o reproducción , por supuesto sería una tontería eliminar todos los eventos de la cola (lo que significa que tendría que agregarlos nuevamente cuando se rebobine). En cambio, también podría usar una matriz que contenga sus eventos . Un evento consistiría en un
Time
yCallback
. Tendría que mantener su matriz ordenada porTime
.Luego, en lugar de eliminar elementos de la matriz, debería realizar un seguimiento del índice de matriz actual y , con cada actualización, buscar desde ese índice y ejecutar todas las devoluciones de llamada al
Playhead >= Time
tiempo que aumenta el índice en consecuencia.Implementar una velocidad de reproducción más rápida funciona con ambas implementaciones y sería tan simple como:
fuente
No, Unity3D no tiene tal API fuera de la caja.
Sin embargo, admite corutinas, y le sugiero que las examine. Las corutinas generalmente hacen que la programación y sincronización de eventos sea realmente fácil.
fuente
No estoy seguro de si esto es nuevo desde las respuestas en 2012, pero Unity en realidad tiene soporte para el control de la línea de tiempo a través del Editor de animación (heredado) .
Aunque esta función está destinada principalmente a animar parámetros de objetos con curvas, incluye la capacidad de activar scripts en eventos de animación . Estas secuencias de comandos podrían controlar sus gráficos y audio.
fuente