1 /*** 2 * 3 * 插件: 音频管理类 4 * 5 * 功能: 项目中音频剪辑统一管理。 6 * 7 * 作者: 刘国柱 8 * 9 * Version: 1.0 10 * 11 */ 12 using UnityEngine; 13 using System.Collections; 14 using System.Collections.Generic; //泛型集合命名空间 15 16 public class AudioManager : MonoBehaviour 17 { 18 public AudioClip[] AudioClipArray; //剪辑数组 19 public static float AudioBackgroundVolumns = 1F; //背景音量 20 public static float AudioEffectVolumns = 1F; //音效音量 21 22 private static Dictionary<string, AudioClip> _DicAudioClipLib; //音频库 23 private static AudioSource[] _AudioSourceArray; //音频源数组 24 private static AudioSource _AudioSource_BackgroundAudio; //背景音乐 25 private static AudioSource _AudioSource_AudioEffectA; //音效源A 26 private static AudioSource _AudioSource_AudioEffectB; //音效源B 27 28 /// <summary> 29 /// 音效库资源加载 30 /// </summary> 31 void Awake() 32 { 33 //音频库加载 34 _DicAudioClipLib = new Dictionary<string, AudioClip>(); 35 foreach (AudioClip audioClip in AudioClipArray) 36 { 37 _DicAudioClipLib.Add(audioClip.name, audioClip); 38 } 39 //处理音频源 40 _AudioSourceArray = this.GetComponents<AudioSource>(); 41 _AudioSource_BackgroundAudio = _AudioSourceArray[0]; 42 _AudioSource_AudioEffectA = _AudioSourceArray[1]; 43 _AudioSource_AudioEffectB = _AudioSourceArray[2]; 44 45 //从数据持久化中得到音量数值 46 if (PlayerPrefs.GetFloat("AudioBackgroundVolumns") >= 0) 47 { 48 AudioBackgroundVolumns = PlayerPrefs.GetFloat("AudioBackgroundVolumns"); 49 _AudioSource_BackgroundAudio.volume = AudioBackgroundVolumns; 50 } 51 if (PlayerPrefs.GetFloat("AudioEffectVolumns") >= 0) 52 { 53 AudioEffectVolumns = PlayerPrefs.GetFloat("AudioEffectVolumns"); 54 _AudioSource_AudioEffectA.volume = AudioEffectVolumns; 55 _AudioSource_AudioEffectB.volume = AudioEffectVolumns; 56 } 57 } 58 59 /// <summary> 60 /// 播放背景音乐 61 /// </summary> 62 /// <param name="audioClip">音频剪辑</param> 63 public static void PlayBackground(AudioClip audioClip) 64 { 65 //防止背景音乐的重复播放。 66 if (_AudioSource_BackgroundAudio.clip == audioClip) 67 { 68 return; 69 } 70 //处理全局背景音乐音量 71 _AudioSource_BackgroundAudio.volume = AudioBackgroundVolumns; 72 if (audioClip) 73 { 74 _AudioSource_BackgroundAudio.loop = true; 75 _AudioSource_BackgroundAudio.clip = audioClip; 76 _AudioSource_BackgroundAudio.Play(); 77 } 78 else 79 { 80 Debug.LogWarning("[AudioManager.cs/PlayBackground()] audioClip==null !"); 81 } 82 } 83 84 /// <summary> 85 /// 播放背景音乐 86 /// </summary> 87 /// <param name="strAudioName"></param> 88 public static void PlayBackground(string strAudioName) 89 { 90 if (!string.IsNullOrEmpty(strAudioName)) 91 { 92 PlayBackground(_DicAudioClipLib[strAudioName]); 93 } 94 else 95 { 96 Debug.LogWarning("[AudioManager.cs/PlayBackground()] strAudioName==null !"); 97 } 98 } 99 100 /// <summary> 101 /// 播放音效_音频源A 102 /// </summary> 103 /// <param name="audioClip">音频剪辑</param> 104 public static void PlayAudioEffectA(AudioClip audioClip) 105 { 106 //处理全局音效音量 107 _AudioSource_AudioEffectA.volume = AudioEffectVolumns; 108 109 if (audioClip) 110 { 111 _AudioSource_AudioEffectA.clip = audioClip; 112 _AudioSource_AudioEffectA.Play(); 113 } 114 else 115 { 116 Debug.LogWarning("[AudioManager.cs/PlayAudioEffectA()] audioClip==null ! Please Check! "); 117 } 118 } 119 120 /// <summary> 121 /// 播放音效_音频源B 122 /// </summary> 123 /// <param name="audioClip">音频剪辑</param> 124 public static void PlayAudioEffectB(AudioClip audioClip) 125 { 126 //处理全局音效音量 127 _AudioSource_AudioEffectB.volume = AudioEffectVolumns; 128 129 if (audioClip) 130 { 131 _AudioSource_AudioEffectB.clip = audioClip; 132 _AudioSource_AudioEffectB.Play(); 133 } 134 else 135 { 136 Debug.LogWarning("[AudioManager.cs/PlayAudioEffectB()] audioClip==null ! Please Check! "); 137 } 138 } 139 140 /// <summary> 141 /// 播放音效_音频源A 142 /// </summary> 143 /// <param name="strAudioEffctName">音效名称</param> 144 public static void PlayAudioEffectA(string strAudioEffctName) 145 { 146 if (!string.IsNullOrEmpty(strAudioEffctName)) 147 { 148 PlayAudioEffectA(_DicAudioClipLib[strAudioEffctName]); 149 } 150 else 151 { 152 Debug.LogWarning("[AudioManager.cs/PlayAudioEffectA()] strAudioEffctName==null ! Please Check! "); 153 } 154 } 155 156 /// <summary> 157 /// 播放音效_音频源B 158 /// </summary> 159 /// <param name="strAudioEffctName">音效名称</param> 160 public static void PlayAudioEffectB(string strAudioEffctName) 161 { 162 if (!string.IsNullOrEmpty(strAudioEffctName)) 163 { 164 PlayAudioEffectB(_DicAudioClipLib[strAudioEffctName]); 165 } 166 else 167 { 168 Debug.LogWarning("[AudioManager.cs/PlayAudioEffectB()] strAudioEffctName==null ! Please Check! "); 169 } 170 } 171 172 /// <summary> 173 /// 改变背景音乐音量 174 /// </summary> 175 /// <param name="floAudioBGVolumns"></param> 176 public static void SetAudioBackgroundVolumns(float floAudioBGVolumns) 177 { 178 _AudioSource_BackgroundAudio.volume = floAudioBGVolumns; 179 AudioBackgroundVolumns = floAudioBGVolumns; 180 //数据持久化 181 PlayerPrefs.SetFloat("AudioBackgroundVolumns", floAudioBGVolumns); 182 } 183 184 /// <summary> 185 /// 改变音效音量 186 /// </summary> 187 /// <param name="floAudioEffectVolumns"></param> 188 public static void SetAudioEffectVolumns(float floAudioEffectVolumns) 189 { 190 _AudioSource_AudioEffectA.volume = floAudioEffectVolumns; 191 _AudioSource_AudioEffectB.volume = floAudioEffectVolumns; 192 AudioEffectVolumns = floAudioEffectVolumns; 193 //数据持久化 194 PlayerPrefs.SetFloat("AudioEffectVolumns", floAudioEffectVolumns); 195 } 196 }