构成
主要由两部分构成
AudioModule脚本主要是实现内部逻辑
AudioSystem脚本主要是为外部提供调用
实现
AudioModule
主要分为三部分:总音量,背景音乐,特效音乐
这个脚本会挂载到场景中,用了奥丁插件,来更好的编写inspector面板的界面
公开了几个变量,如图:
特效的音乐是要用到对象池,因为有可能存在多个特效音乐,
包括一些音乐相关的方法
播放,暂停,恢复,停止 音乐等
关于特效的音乐:
播放器先从对象池中取出,不用的话再用对象池回收。
AudioSystem
主要是供外部调用的方法
注释给的也很详细,这块很简单,不复杂
/// <summary>
/// 播放背景音乐
/// </summary>
/// <param name="clip">音乐片段</param>
/// <param name="loop">是否循环</param>
/// <param name="volume">音量,-1代表不设置,采用当前音量</param>
public static void PlayBGAudio(AudioClip clip, bool loop = true, float volume = -1)
=> audioModule.PlayBGAudio(clip, loop, volume);
/// <summary>
/// 使用音效数组播放背景音乐,自动循环
/// </summary>
public static void PlayBGAudioWithClips(AudioClip[] clips, float volume = -1)
=> audioModule.PlayBGAudioWithClips(clips, volume);
/// <summary>
/// 停止背景音乐
/// </summary>
public static void StopBGAudio() => audioModule.StopBGAudio();
/// <summary>
/// 暂停背景音乐
/// </summary>
public static void PauseBGAudio() => audioModule.PauseBGAudio();
/// <summary>
/// 继续播放背景音乐
/// </summary>
public static void UnPauseBGAudio() => audioModule.UnPauseBGAudio();
/// <summary>
/// 播放一次特效音乐,并且绑定在某个游戏物体身上
/// 但是不用担心,游戏物体销毁时,会瞬间解除绑定,回收音效播放器
/// </summary>
/// <param name="clip">音效片段</param>
/// <param name="autoReleaseClip">播放完毕时候自动回收audioClip</param>
/// <param name="component">挂载组件</param>
/// <param name="volumeScale">音量 0-1</param>
/// <param name="is3d">是否3D</param>
/// <param name="callBack">回调函数-在音乐播放完成后执行</param>
public static void PlayOnShot(AudioClip clip, Component component = null, bool autoReleaseClip = false, float volumeScale = 1, bool is3d = true, Action callBack = null)
=> audioModule.PlayOnShot(clip, component, autoReleaseClip, volumeScale, is3d, callBack);
/// <summary>
/// 播放一次特效音乐
/// </summary>
/// <param name="clip">音效片段</param>
/// <param name="position">播放的位置</param>
/// <param name="autoReleaseClip">播放完毕时候自动回收audioClip</param>
/// <param name="volumeScale">音量 0-1</param>
/// <param name="is3d">是否3D</param>
/// <param name="callBack">回调函数-在音乐播放完成后执行</param>
public static void PlayOnShot(AudioClip clip, Vector3 position, bool autoReleaseClip = false, float volumeScale = 1, bool is3d = true, Action callBack = null)
=> audioModule.PlayOnShot(clip, position, autoReleaseClip, volumeScale, is3d, callBack);
总结
声音系统主要是把背景音乐,特效音乐做统一管理,利用对象池减少开销。