В Unity действительно нет нормального API, типа колбека на завершение музыки.
Как один из вариантов можно сделать вот так:
Используется csharp
public class BackgroundMusicPlayer : MonoBehaviour
{
[SerializeField]
private AudioClip[] _clips;
[SerializeField]
private AudioSource _audio;
private void Start()
{
PlayNextClip();
}
private void PlayNextClip()
{
var clip = GetNextClip();
if (clip != null)
{
StartCoroutine(PlayProceed(clip));
_audio.clip = clip;
_audio.Play();
}
}
private IEnumerator PlayProceed(AudioClip clip)
{
yield return new WaitForSeconds(clip.length);
PlayNextClip();
}
private AudioClip GetNextClip()
{
var length = _clips.Length;
if (length > 0)
return _clips[Random.Range(0, length)];
return null;
}
}
Не тестилось, но работать должно)
Массив
_clips к слову можно заполнять не в редакторе, как сейчас, а как
1max1 предолжил - поудобней будет) Достаточно просто добавить
Используется csharp
_clips = Resources.LoadAll<AudioClip>("Sounds");
в Start() перед вызовом PlayNextClip()