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