старый вопрос, но мне пришлось сделать то же самое сегодня, я попробовал метод, основанный на длительности, но в конце концов остановился на собственном решении, которое кажется мне самым простым:
1) создайте статический вспомогательный класс, скажем, 'SoundsManager', как в ответе лизергиновой кислоты.
2) создайте очередь SoundsEffectInstanses и воспроизведите первый из них ("_sheduledSounds" в приведенном ниже коде).
3) Обновите класс с каждым игровым циклом и проверьте, остановлен ли звуковой инстанс:
public static void Update()
{
if (_sheduledSounds != null && _sheduledSounds.Count > 1)
{
if (_sheduledSounds.Peek().State == SoundState.Stopped)
{
_sheduledSounds.Dequeue();
_sheduledSounds.Peek().Play();
}
}
}