04、Unity_声音管理器


 

1、分享一个Unity中用于管理声音的声音管理器,适合于中小型项目。

2、借鉴了很多的源码,最后修改完成,吸取百家之长,改为自己所用。

3、源码如下:

 1 /*
 2  *  3  * 开发时间:2018.11.20  4  *  5  * 功能:用来对项目中的所有音频做同一的管理  6  *  7  * 描述:  8  * 1、挂载该脚本的游戏物体上要挂载三个AudioSouce[可以修改脚本,动态挂]  9  * 2、建议大的背景音乐不要加入AudioClip[],对内存消耗大。而是哪里用到,单独使用PlayBackground函数播放  10  * 3、小的音效片段可以将其加入AudioClip[]中,可以很方便的管理,可以通过声音剪辑、声音剪辑名称来进行音乐的播放  11  * 4、该声音管理可以进行背景音乐的播放、音效的播放、背景音乐的音调改变、音效的音调改变、停止播放  12  *  13  */
 14 using UnityEngine;  15 using System.Collections;  16 using System.Collections.Generic;  17 
 18 namespace Kernal  19 {  20     public class AudioManager : MonoBehaviour  21  {  22         public AudioClip[] AudioClipArray;                               //剪辑数组
 23 
 24         public static float AudioBackgroundVolumns = 1F;                 //背景音量
 25         public static float AudioEffectVolumns = 1F;                     //音效音量
 26         public static float AudioBackgroundPitch = 1f;                   //背景音乐的音调
 27         public static float AudioEffectPitch = 1.0f;                     //音效的音调
 28 
 29 
 30         private static Dictionary<string, AudioClip> _DicAudioClipLib;   //音频库,将声音名字和声音资源进行关联
 31 
 32         private static AudioSource[] _AudioSourceArray;                  //音频源数组
 33 
 34         private static AudioSource _AudioSource_BackgroundAudio;         //背景音乐
 35         private static AudioSource _AudioSource_AudioEffectA;            //音效源A
 36         private static AudioSource _AudioSource_AudioEffectB;            //音效源B  37         //......可以按需求进行添加
 38 
 39         /// <summary>
 40         /// 音效库资源加载  41         /// </summary>
 42         void Awake()  43  {  44             //音频库加载[初始化,将音乐剪辑和名字联系起来]
 45             _DicAudioClipLib = new Dictionary<string, AudioClip>();  46 
 47             foreach (AudioClip audioClip in AudioClipArray)  48  {  49  _DicAudioClipLib.Add(audioClip.name, audioClip);  50  }  51 
 52 
 53             //处理音频源,也就是得到用来播放声音的音乐播放器
 54             _AudioSourceArray = this.GetComponents<AudioSource>();  55             _AudioSource_BackgroundAudio = _AudioSourceArray[0];               //其中一个用来播放背景音乐
 56             _AudioSource_AudioEffectA = _AudioSourceArray[1];                  //其中一个用来播放音乐1
 57             _AudioSource_AudioEffectB = _AudioSourceArray[2];  58 
 59 
 60             //从数据持久化中得到音量数值
 61             if (PlayerPrefs.GetFloat("AudioBackgroundVolumns") >= 0)  62  {  63                 AudioBackgroundVolumns = PlayerPrefs.GetFloat("AudioBackgroundVolumns");  64                 _AudioSource_BackgroundAudio.volume = AudioBackgroundVolumns;  65  }  66 
 67             if (PlayerPrefs.GetFloat("AudioEffectVolumns") >= 0)  68  {  69                 AudioEffectVolumns = PlayerPrefs.GetFloat("AudioEffectVolumns");  70                 _AudioSource_AudioEffectA.volume = AudioEffectVolumns;  71                 _AudioSource_AudioEffectB.volume = AudioEffectVolumns;  72  }  73 
 74             //设置音乐的音效
 75             if (PlayerPrefs.HasKey("AudioBackgroundPitch"))  76  {  77                 AudioBackgroundPitch = PlayerPrefs.GetFloat("AudioBackgroundPitch");  78  }  79             if (PlayerPrefs.HasKey("AudioEffectPitch"))  80  {  81                 AudioEffectPitch = PlayerPrefs.GetFloat("AudioEffectPitch");  82  }  83 
 84             _AudioSource_BackgroundAudio.pitch = AudioBackgroundPitch;  85             _AudioSource_AudioEffectA.pitch = AudioEffectPitch;  86             _AudioSource_AudioEffectB.pitch = AudioEffectPitch;  87 
 88  }  89 
 90         /// <summary>
 91         /// 播放背景音乐  92         /// 传入的参数是背景音乐的AudioClip  93         /// </summary>
 94         /// <param name="audioClip">音频剪辑</param>
 95         public static void PlayBackground(AudioClip audioClip)  96  {  97             //防止背景音乐的重复播放。
 98             if (_AudioSource_BackgroundAudio.clip == audioClip)  99  { 100                 return; 101  } 102 
103             //处理全局背景音乐音量
104             _AudioSource_BackgroundAudio.volume = AudioBackgroundVolumns; 105             _AudioSource_BackgroundAudio.pitch = AudioBackgroundPitch; 106             if (audioClip) 107  { 108                 _AudioSource_BackgroundAudio.loop = true;                      //背景音乐是循环播放的
109                 _AudioSource_BackgroundAudio.clip = audioClip; 110  _AudioSource_BackgroundAudio.Play(); 111  } 112             else
113  { 114                 Debug.LogWarning("[AudioManager.cs/PlayBackground()] audioClip==null !"); 115  } 116  } 117 
118         /// <summary>
119         /// 播放背景音乐 120         /// 传入的参数是声音片段的名字,要注意,其声音片段要加入声音数组中 121         /// </summary>
122         /// <param name="strAudioName"></param>
123         public static void PlayBackground(string strAudioName) 124  { 125             if (!string.IsNullOrEmpty(strAudioName)) 126  { 127  PlayBackground(_DicAudioClipLib[strAudioName]); 128  } 129             else
130  { 131                 Debug.LogWarning("[AudioManager.cs/PlayBackground()] strAudioName==null !"); 132  } 133  } 134 
135         /// <summary>
136         /// 播放音效_音频源A 137         /// </summary>
138         /// <param name="audioClip">音频剪辑</param>
139         public static void PlayAudioEffectA(AudioClip audioClip) 140  { 141             //处理全局音效音量
142             _AudioSource_AudioEffectA.volume = AudioEffectVolumns; 143             _AudioSource_AudioEffectA.pitch = AudioEffectPitch; 144 
145             if (audioClip) 146  { 147                 _AudioSource_AudioEffectA.clip = audioClip; 148  _AudioSource_AudioEffectA.Play(); 149  } 150             else
151  { 152                 Debug.LogWarning("[AudioManager.cs/PlayAudioEffectA()] audioClip==null ! Please Check! "); 153  } 154  } 155         /// <summary>
156         /// 播放音效_音频源A 157         /// </summary>
158         /// <param name="strAudioEffctName">音效名称</param>
159         public static void PlayAudioEffectA(string strAudioEffctName) 160  { 161             if (!string.IsNullOrEmpty(strAudioEffctName)) 162  { 163  PlayAudioEffectA(_DicAudioClipLib[strAudioEffctName]); 164  } 165             else
166  { 167                 Debug.LogWarning("[AudioManager.cs/PlayAudioEffectA()] strAudioEffctName==null ! Please Check! "); 168  } 169  } 170         /// <summary>
171         /// 播放音效_音频源B 172         /// </summary>
173         /// <param name="audioClip">音频剪辑</param>
174         public static void PlayAudioEffectB(AudioClip audioClip) 175  { 176             //处理全局音效音量
177             _AudioSource_AudioEffectB.volume = AudioEffectVolumns; 178             _AudioSource_AudioEffectB.pitch = AudioEffectPitch; 179             if (audioClip) 180  { 181                 _AudioSource_AudioEffectB.clip = audioClip; 182  _AudioSource_AudioEffectB.Play(); 183  } 184             else
185  { 186                 Debug.LogWarning("[AudioManager.cs/PlayAudioEffectB()] audioClip==null ! Please Check! "); 187  } 188  } 189 
190         /// <summary>
191         /// 播放音效_音频源B 192         /// </summary>
193         /// <param name="strAudioEffctName">音效名称</param>
194         public static void PlayAudioEffectB(string strAudioEffctName) 195  { 196             if (!string.IsNullOrEmpty(strAudioEffctName)) 197  { 198  PlayAudioEffectB(_DicAudioClipLib[strAudioEffctName]); 199  } 200             else
201  { 202                 Debug.LogWarning("[AudioManager.cs/PlayAudioEffectB()] strAudioEffctName==null ! Please Check! "); 203  } 204  } 205 
206 
207         /// <summary>
208         /// 停止播放音效A 209         /// </summary>
210         public static void StopPlayAudioEffectA() 211  { 212  _AudioSource_AudioEffectA.Stop(); 213  } 214 
215         /// <summary>
216         /// 停止播放音效B 217         /// </summary>
218         public static void StopPlayAudioEffectB() 219  { 220  _AudioSource_AudioEffectB.Stop(); 221  } 222 
223         /// <summary>
224         /// 停止播放背景音乐 225         /// </summary>
226         public static void StopPlayAudioBackGround() 227  { 228  _AudioSource_BackgroundAudio.Stop(); 229  } 230 
231         /// <summary>
232         /// 改变背景音乐音量 233         /// </summary>
234         /// <param name="floAudioBGVolumns"></param>
235         public static void SetAudioBackgroundVolumns(float floAudioBGVolumns) 236  { 237             _AudioSource_BackgroundAudio.volume = floAudioBGVolumns; 238             AudioBackgroundVolumns = floAudioBGVolumns; 239             //数据持久化
240             PlayerPrefs.SetFloat("AudioBackgroundVolumns", floAudioBGVolumns); 241  } 242 
243 
244         /// <summary>
245         /// 改变音效音量 246         /// </summary>
247         /// <param name="floAudioEffectVolumns"></param>
248         public static void SetAudioEffectVolumns(float floAudioEffectVolumns) 249  { 250             _AudioSource_AudioEffectA.volume = floAudioEffectVolumns; 251             _AudioSource_AudioEffectB.volume = floAudioEffectVolumns; 252             AudioEffectVolumns = floAudioEffectVolumns; 253             //数据持久化
254             PlayerPrefs.SetFloat("AudioEffectVolumns", floAudioEffectVolumns); 255  } 256 
257         /// <summary>
258         /// 改变背景音乐的音调 259         /// </summary>
260         /// <param name="floAudioBGPichs">改变的音调值</param>
261         public static void SetAudioBackgroundPitch(float floAudioBGPitchs) 262  { 263             _AudioSource_BackgroundAudio.pitch = floAudioBGPitchs; 264 
265             //数据持久化
266             PlayerPrefs.SetFloat("AudioBackgroundPitch", floAudioBGPitchs); 267  } 268 
269         /// <summary>
270         /// 改变音效的音调 271         /// </summary>
272         /// <param name="floAudioEffectPitchs">音效的音调值</param>
273         public static void SetAudioEffectPitch(float floAudioEffectPitchs) 274  { 275             _AudioSource_AudioEffectA.pitch = floAudioEffectPitchs; 276             _AudioSource_AudioEffectB.pitch = floAudioEffectPitchs; 277 
278             //数据持久化
279             PlayerPrefs.SetFloat("AudioEffectPitch", floAudioEffectPitchs); 280  } 281 
282  } 283 }

 

 

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM