Gameframework(Sound模塊初探篇)

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章