Puede estar familiarizado con los juegos de ritmo como Dancing Line , Geometry Dash o incluso Guitar Hero . Tienen algo en común: cada acción del juego se sincroniza con la música. Mi propósito es hacer un juego como Geometry Dash donde el jugador tiene que hacer algunas acciones en ritmo mientras el personaje se desplaza automáticamente en el nivel. Tengo algunas preguntas sobre este tipo de juego:
- ¿Tengo que mantener mi FPS constante ya que siempre debe estar sincronizado con la música?
- ¿Cómo puedo construir mis niveles con una música en mente para asegurarme de que esté sincronizada?
Estoy trabajando en Unity usando C #.
fuente
Como alternativa, si está bien con no trabajar desde cero.
Ya hay activos listos (en Extensiones de editor / Audio como https://www.assetstore.unity3d.com/en/#!/content/54639 (pagado) o https://www.assetstore.unity3d.com/en / #! / content / 39835 (gratis)) donde puedes sincronizar pistas de música a eventos. En ese ejemplo, el arma está disparando al ritmo de la música.
Si quieres aprender cómo funcionan, prueba 1-2 de los gratuitos y mira la fuente.
fuente
La unidad ya desacopla la jugabilidad de la velocidad de fotogramas. Si recuerdas usar siempre
Time.deltaTime
en tus funciones de actualización, la velocidad de cuadros de gráficos real no debería afectar la velocidad de juego. Entonces, cuando comienzas el juego y la pista de audio al mismo tiempo, deben permanecer sincronizados.Con respecto al diseño de niveles en torno a la música, hay dos enfoques:
El enfoque procesal. Use algoritmos de análisis de audio para generar automáticamente niveles alrededor de pistas de audio. Lo más simple es buscar picos de volumen. Eso ya debería permitirle identificar ritmos de batería en muchas canciones y generar obstáculos en consecuencia. Un paso más allá es detectar cambios de volumen por separado en diferentes espectros de frecuencia. Esto hace que la detección de latidos sea más confiable y le permite generar diferentes obstáculos para diferentes tonos. Pero eso sigue rascando la superficie. El análisis de audio es un campo muy amplio e interesante. La gente escribió mucha literatura científica al respecto.
La profundidad que necesita para sumergirse en este campo depende de cuán ambicioso sea. Algunos juegos están satisfechos con solo detectar los latidos y generar aleatoriamente todo el resto del diseño de nivel ( Crypt of the Necrodancer ). Otros intentan poner tantos aspectos del diseño de niveles bajo el control del audio como pueden ( Audiosurf ).
Muchos juegos de ritmo utilizan un enfoque híbrido. Generas un primer borrador del nivel usando un generador y luego lo modificas a mano para que sea más jugable.
fuente
Time.time
en su lugar.Muy común es el enfoque para tener un "mapa de ritmo". Cualquier tipo de datos que represente los ritmos de la canción. Puede ser una textura, un archivo de datos o cualquier otra cosa que contenga esa información. La mayoría de las veces se crea manualmente para crear diferentes ritmos y combinaciones, versiones de velocidades para un mapa de audio.
Sin embargo, puede generarse procesalmente a partir de datos de archivos de audio.
¿Cómo conseguir que la velocidad coincida con el "punto de latido"? ¿Cuándo generar un objeto?
Speed = Distance / Time
.Distance =
Distancia entre los puntos de creación de GameObject y de "beat point".Time =
La longitud de audio y el mapa de ritmo construido deberían ser suficientes. Con esta información puede analizar los datos de audio / mapa para predecir cuándo se debe generar un objeto para llegar al punto exacto. Ahora todo depende de cuándo quieres engendrar ese objeto, si quieres que sea muy rápido después del engendro, entonces lo engendras más tarde con gran velocidad. Si desea que esté a una velocidad normal, necesitará tiempo para llegar al reproductor y el audio necesita tiempo para reproducirse en el momento adecuado.Incluso puede generar un nuevo mapa con marcas de tiempo para engendros de objetos beat para un mapa de audio en particular. Tienes que hacer algunas predicciones en algún momento para poder igualar el ritmo, para el estilo más popular, diría, para predecir
when
generar el objeto para que se mueva con seguridadspeed
. Esos pueden hacerse en tiempo de ejecución, o leerse de algún archivo calculado previamente, o guardarse en RAM ...Supongo que los juegos como
Osu
no tienen estoDistance
, solo tienen tiempo de reducción de círculos, bpm ... Los mapas generalmente están hechos a medida. Por lo tanto, el enfoque para calcular las imágenes depende del estilo del juego que estés haciendo también.Para resumir todo, los valores son interdependientes. Depende de cuántos latidos tenga, de la distancia entre el punto de generación y el jugador, y a veces depende de los datos proporcionados [algunos juegos tienen la velocidad de cada latido y su apariencia codificada en algún archivo de datos que se crea manualmente]. Si lo está haciendo de manera procesal, puede calcular todo básicamente utilizando datos de audio.
fuente