feat: add PlayOnTrigger for music-synced audio playback
- Add PlayOnTrigger method to AudioSystem for scheduling audio playback on music sync events (beat/bar/grid) - Rename ButtonInvoker to SetStateBind for better clarity - Update PlaySoundBind to support both direct playback and trigger-based playback with callback flags - Add CallbackFlags enum (MusicSyncBeat, MusicSyncBar, MusicSyncGrid) - Update Metronome demo to use new callback flag naming convention - Add test audio file sfx_notice_test.wav - Update scene UI to demonstrate PlayOnTrigger functionality
This commit is contained in:
@@ -127,6 +127,49 @@ namespace OCES.Audio
|
||||
ActiveStates = this.m_musicSystem.ActiveStates;
|
||||
}
|
||||
|
||||
public void PlayOnTrigger(uint audioId, CallbackFlags callbackFlags)
|
||||
{
|
||||
Action<uint> callback = null;
|
||||
callback = (id) =>
|
||||
{
|
||||
// 播放音效
|
||||
Play(audioId);
|
||||
|
||||
// 取消订阅,确保只触发一次
|
||||
switch (callbackFlags)
|
||||
{
|
||||
case CallbackFlags.MusicSyncBeat:
|
||||
OnBeat -= callback;
|
||||
break;
|
||||
case CallbackFlags.MusicSyncBar:
|
||||
OnBar -= callback;
|
||||
break;
|
||||
case CallbackFlags.MusicSyncGrid:
|
||||
OnGrid -= callback;
|
||||
break;
|
||||
}
|
||||
};
|
||||
|
||||
// 订阅对应的事件
|
||||
switch (callbackFlags)
|
||||
{
|
||||
case CallbackFlags.MusicSyncBeat:
|
||||
OnBeat += callback;
|
||||
break;
|
||||
case CallbackFlags.MusicSyncBar:
|
||||
OnBar += callback;
|
||||
break;
|
||||
case CallbackFlags.MusicSyncGrid:
|
||||
OnGrid += callback;
|
||||
break;
|
||||
|
||||
default:
|
||||
Debug.LogWarning($"[AudioSystem] Unknown callback flag '{callbackFlags}'." +
|
||||
$"Audio Container with ID {audioId} will be ignored.");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// ─────────────────────────────────────────────
|
||||
// 初始化
|
||||
// ─────────────────────────────────────────────
|
||||
|
||||
Reference in New Issue
Block a user