1.Sound模塊的一些API
首先要知道這個框架常用的Sound模塊API,我們先找到SettingForm.cs就可以定位SoundExtension.cs,這個類是靜態拓展SoundComponent類,我們可以看到如下函數:
PlayMusic | 播放背景音樂 |
StopMusic | 暫停背景音樂 |
PlaySound | 播放普通聲音 |
PlayUISound | 播放UI模塊的音樂 |
IsMuted | 此聲音組是否靜音 |
Mute | 聲音組靜音或取消靜音 |
GetVolume | 獲取聲音的音量 |
SetVolume | 修改聲音的音量 |
2.框架實現了什麼?
首先我們生成一下GameForwork.Dll的聲音模塊的項目依賴圖,發現SoundManager是核心的類,聲音模塊啓動會伴隨着5大事件(聲音播放成功的事件,聲音播放失敗的事件,播放聲音時依賴資源更新事件,重置聲音代理事件,播放聲音參數更新事件),關係依賴圖如下:
Sound模塊內部到底實現了什麼?SoundManager是對整體聲音模塊的控制,類裏面定義的一些變量就知道它大概的用處了,具體代碼如下:
private readonly Dictionary<string, SoundGroup> m_SoundGroups;//所有聲音組
private readonly List<int> m_SoundsBeingLoaded;//已經加載的聲音
private readonly HashSet<int> m_SoundsToReleaseOnLoad;//已經是否的聲音
private readonly LoadAssetCallbacks m_LoadAssetCallbacks;//資源成功加載的回調
private IResourceManager m_ResourceManager;//資源管理器
private ISoundHelper m_SoundHelper;//聲音輔助器
private int m_Serial;//聲音的序列編號,從0開始遞增的
private EventHandler<PlaySoundSuccessEventArgs> m_PlaySoundSuccessEventHandler;//聲音播放成功事件
private EventHandler<PlaySoundFailureEventArgs> m_PlaySoundFailureEventHandler;//聲音播放失敗的事件
private EventHandler<PlaySoundUpdateEventArgs> m_PlaySoundUpdateEventHandler;//聲音更新的事件
private EventHandler<PlaySoundDependencyAssetEventArgs>m_PlaySoundDependencyAssetEventHandler;//聲音的依賴資源加載
ISoundHelper主要是實現資源的創建和釋放的。
ISoundAgentHelper主要是掛載聲音上的輔助類,聲音的各種屬性獲取和設置,控制聲音的播放、暫停、靜音、恢復播放等等。
ISoundGroupHelper主要是獲取或設置聲音組輔助器所在的混音組。
ISoundAgent主要是單個聲音代理類,聲音的各種屬性獲取和設置,控制聲音的播放、暫停、靜音、恢復播放等等。
ISoundGroup主要是獲取聲音組的一些屬性,和控制聲音組的播放、暫停、靜音、恢復播放,裏面有List<SoundAgent>的列表。
3.Audio Mixer的用處
在遊戲中,通常我們需要一個模塊的去控制聲音的控制音量,比如UI模塊的整體音量的修改,場景中的音量的修改。我們可以將用一個List<Audio Source>來表示此聲音組,但是Unity已經幫我們搞好了一個組件,那就Audio Mixer組件,我們雙擊下項目中的看一下作者定義了什麼,如圖所示:
可以看到一個聲音單獨對應一個AudioMixerGroup,我們可以看到每個聲音組下有3個按鈕S,M,B。S按鈕表示此聲音組單獨播放,M表示把此聲音組靜音,B表示繞過其他聲音組中的所有影響。每一個聲音組可以添加Send 表示設置接收者,添加Receive表示設置接收者,比如你當你播放Sound組的時候,你可以讓UISound組的音量調低等等事件,這裏就說這麼多,其他用法大家自覺探究吧。
AudioMixer介紹:https://docs.unity3d.com/Manual/AudioMixerOverview.html