音效系统SFXManager
音效系统SFXManager
背景
音效 简称 SFX ,框架的音效系统,支持音效的动态加载、播放、音量控制、淡入淡出等常见操作,同时能够管理不同类型的音效资源和音量设置。可以满足基本音效使用要求。同样的,基于模块化原则,开发者可以使用其他音效解决方案,只需实现SFXManager中的必要接口函数,即可无缝切换音乐解决方案,比如 Master Audio 和Wwise等插件。
使用
数据结构
音效系统将音效进行分类,音效类别定义枚举文件路径:项目路径\Luban\Datas\Enums\DefSFXType.xlsx
预设 常规音效Se 和 语音Voice :
SFX数据配置
配置表路径:项目路径\Luban\Datas\SFX.xlsx
其中clipPaths可以填写多个 音效资源文件的aa路径 ,通过英文逗号隔开,即可完成随机选择音效文件进行播放的功能。Luban将clipsPaths定义为List。
播放音效
oneShot为True时,重复播放不会中断上一次的该音效播放事件,为False时会中断并重新播放该音效,与unity内的oneShot含义保持一致。
1 | // 即时播放 |
停止音效
- 停止当前正在播放的指定音效
异步播放的音效需要等到音效真正播放后才能停止音效的播放,播放前请拿到协程的句柄,手动停止协程。1
2// SFXManager.Instance.Stop(音效名);
SFXManager.Instance.Stop("test"); - 停止播放当前所有正在播放的音效
1
SFXManager.Instance.StopAllSfx()
- 带延迟、淡出功能的停止当前正在播放的指定音效
1
2
3// 等待 延迟播放时间 + 淡出时间
// 协程 SFXManager.Instance.StopDelayFadeIEnumerator(音效名, 延迟播放时间, 淡出时间)
StartCoroutine(SFXManager.Instance.StopDelayFadeIEnumerator("test", 0.1f, 0.2f));
音量控制
- 设置指定音效类型的所有音效的音量,混响器按音效类型进行拆分
1
2// SFXManager.Instance.SetVolumeRuntime(音效类型, 音量分贝值)
SFXManager.Instance.SetVolumeRuntime(DefSFXType.Se, 0.2f) - 将指定音效类型的所有音效静音,由于混响器不能直接静音的原因。
1
2// SFXManager.Instance.MuteVolume(音效类型)
SFXManager.Instance.MuteVolume(DefSFXType.Se)
注意事项
- Addressables加载混响器后,应用混响器音量时会变回0dB,bug原因未知。有设置系统的需要手动重新设置SFX音量设置值。
内部实现
- SFXManager初始化时,会读取SFX.xlsx的所有数据项,每一个数据项生成一个GameObject并添加AudioSource组件,SFXManager内部维护 AudioSource字典 <配置表数据项,AudioSource>
1
private Dictionary<RowCfgSFX, AudioSource> _sfxItems;
- SFXManager使用一个全局的混响器AudioMixer,混响器以音效类型定义枚举进行输出拆分,混响器资源文件路径:项目路径\Assets\AddressableAssets\AudioMixer\AudioMixer.mixer
- 设置音效类型的音量时,通过混响器参数进行设置,同时SFXManager内部维护了混响器的输出组字典 <音效类型, 输出组>
1
private readonly Dictionary<DefSFXType, AudioMixerGroup> _sfxMixerGroupDic;
评论