как привязать определенное действие к bpm музыки?
Я делаю музыкальную игру, и мне нужно чтобы объекты появлялись в такт музыки, это вроде не сложно. Но мне так же нужно добавить оффсет, чтоб сместить появление объектов и они появлялись в такт музыки. У меня вроде получилось это сделать, но я не уверен првильно ли я это сделал сточки зрения оптимизации и читаемости кода. Можете пожалуйста посоветовать, что можно улучшить или переписать? Надеюсь понятно описал))
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Cube_Timer : MonoBehaviour
{
public float timer, coolDown, bpm, offset;
//двумерный масив с информацией о номере файла, bpm и оффсете
private float[,] musics = { { 1, 2 }, { 135.04f, 200f }, { 0.020f, 0.582f } };
public AudioClip deadlocked, fortuna;
private bool isOffset;
//в старте я случайно выбераю файл музыки
private void Start()
{
float clip = Random.Range(0, musics.GetLength(0) - 1);
if (clip == 0)
{
PlayAudio(deadlocked, musics[1, 0], musics[2, 0]);
}
else if(clip == 1)
{
PlayAudio(fortuna, musics[1, 1], musics[2, 1]);
}
isOffset = false;
}
private void FixedUpdate()
{
coolDown = 60 / bpm;
Timer();
}
public void PlayAudio(AudioClip clip, float _bpm, float _offset)
{
GetComponent<AudioSource>().PlayOneShot(clip);
bpm = _bpm;
offset = _offset;
}
//таймер, который припервом ударе убирает от этого самого таймера величену равную оффету
private void Timer()
{
if (timer > 0)
{
if (isOffset == false)
{
timer -= Time.deltaTime + offset;
isOffset = true;
}
else
timer -= Time.deltaTime;
}
if (timer <= 0)
{
print("End");
timer = coolDown;
}
}
}
Ответы (1 шт):
НЕ ОТВЕТ
Это не совсем тот ответ который ты ждешь, но, возможно, тебе будет полезно.
Есть такая игра - Crypt of the NecroDancer. Там уже было реализованно +- то, что ты хочешь.
Там вместе с игрой есть утилитка для анализа ритма музыки. Если ты добавляешь кастомную песню в игру то она сначала пропускает песню через эту утилиту, а на выходе получает некий текстовый файл который и отображает ритм песни.
Эта утилитка тебе поможет только если тебе нужен 1 единый ритм на всю песню (не ритм каждого отдельного инструмента, а именно на всю песню)
И т.к. она внешняя, вероятнее всего на нее можно найти документацию в интернете и понять как анализировать ее формат и использовать в твоей игре.