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 }