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 }