对音频的管理
using UnityEngine; using System.Collections; using System.Collections.Generic; using System; internal class AudioMngr { private static AudioMngr _this = new AudioMngr(); public ResCacher cacher; private Dictionary<string , SoundData> soundDict = new Dictionary<string , SoundData>(0x200); private List<KeyValuePair<string , Res>> soundResList; public ResCacher tempCacher; public static AudioMngr GetInstance() { return _this; } /// <summary> /// 获取音频 /// </summary> /// <param name="soundName">音频名</param> /// <returns>返回音频片段</returns> public AudioClip GetSound(string soundName) { SoundData data = null; if(soundName!=null) { soundName = soundName.ToLower(); if(this.soundDict.TryGetValue(soundName,out data)&& (data!=null)) { return data.clip; } } return null; } /// <summary> /// h获取音乐片段,并返回他的容量大小 /// </summary> /// <param name="soundName"></param> /// <param name="volume"></param> /// <returns></returns> public AudioClip GetSound(string soundName,out float volume) { SoundData data = null; if(string.IsNullOrEmpty(soundName)) { volume = 0f; return null; } soundName = soundName.ToLower(); //在音乐片段中查找 this.soundDict.TryGetValue(soundName , out data); if(data==null) { volume = 0f; return null; } volume = data.volume; return data.clip; } /// <summary> /// /// </summary> /// <param name="soundName"></param> /// <param name="volume"></param> /// <param name="priority">优先级</param> /// <returns></returns> public AudioClip GetSound(string soundName,out float volume,out int priority) { SoundData data = null; if(string.IsNullOrEmpty(soundName)) { volume = 0f; //80 priority = 0x80; return null; } soundName = soundName.ToLower(); //从音频字典中尝试取出音频 this.soundDict.TryGetValue(soundName , out data); if(data==null) { volume = 0f; priority = 0x80; return null; } volume = data.volume; priority = data.priority; return data.clip; } /// <summary> /// 加载声音 /// </summary> public void Load() { this.LoadSound(); if (GlobalMngr.GetInstance().memMode == SettingLevelEnum.LOW) { this.cacher = ResCacheMngr.GetInstance().AddCacher("audio" , 0); this.tempCacher = ResCacheMngr.GetInstance().AddCacher("audio" , 0); } else if (GlobalMngr.GetInstance().memMode == SettingLevelEnum.MEDIUM) { this.cacher = ResCacheMngr.GetInstance().AddCacher("audio" , 3); this.tempCacher = ResCacheMngr.GetInstance().AddCacher("audio" , 0); } else if (GlobalMngr.GetInstance().memMode == SettingLevelEnum.HIGH) { this.cacher = ResCacheMngr.GetInstance().AddCacher("audio" , 3); this.tempCacher = ResCacheMngr.GetInstance().AddCacher("audio" , 3); } else { this.cacher = ResCacheMngr.GetInstance().AddCacher("audio" , 10); this.tempCacher = ResCacheMngr.GetInstance().AddCacher("audio" , 10); } } /// <summary> /// 资源加载 /// </summary> private void LoadSound() { this.soundResList = new List<KeyValuePair<string , Res>>(0x80); //采用assetBundle 方式 路径 string str = "Audio/sound/"; string resourcePath = "Audio/sound"; //将音频text文件加载进入 TextAsset assetToUnload = (TextAsset)ResMngr.GetInstance().LoadSync("audio" , resourcePath).GetObject(); if (assetToUnload == null) { Debug.LogWarning("failed to parse file: " + resourcePath + ". file is not found."); } else { char[] separator = new char[] { '\n' }; string[] strArray = assetToUnload.text.Split(separator); int num = 0; foreach (string str3 in strArray) { num++; string str5 = str3.Replace("\r" , string.Empty); if (str5 != string.Empty) { char[] chArray2 = new char[] { ',' }; string[] strArray3 = str5.Split(chArray2); string key = strArray3[0].ToLower(); SoundData data = new SoundData(); try { if (strArray3.Length >= 3) { data.priority = int.Parse(strArray3[2]); } if (strArray3.Length >= 2) { data.volume = float.Parse(strArray3[1]); } else { data.volume = RunParam.GetInstance().soundVolume; } } catch (Exception exception) { data.volume = RunParam.GetInstance().soundVolume; Debug.LogWarning(string.Format("sound data parse error: {0}, {1}" , str5 , exception.ToString())); } if (!this.soundDict.ContainsKey(key)) { Res res = ResMngr.GetInstance().LoadSync("audio" , str + key); if (res != null) { data.clip = (AudioClip)res.GetObject(); } if (data.clip == null) { Debug.LogWarning(string.Concat(new object[] { "failed to load audio: " , key , ". at line " , num })); } this.soundDict.Add(key , data); } } } if (assetToUnload != null) { Resources.UnloadAsset(assetToUnload); } } } public void Unload() { foreach (KeyValuePair<string , SoundData> pair in this.soundDict) { if (pair.Value != null) { Resources.UnloadAsset(pair.Value.clip); } } this.soundDict.Clear(); ResCacheMngr.GetInstance().RemoveCacher(this.cacher); ResCacheMngr.GetInstance().RemoveCacher(this.tempCacher); } // Nested Types public class SoundData { // Fields public AudioClip clip; public int priority = 0x80; public float volume = 1f; } } using UnityEngine; using System.Collections; public class SoundData { /// <summary>声音/ </summary> public AudioClip clip; /// <summary>播放优先级</summary> public int priority; public float volume; } using UnityEngine; using System.Collections; public class UISound { public const string UI_SOUND_BIANSHEN = "ui/ui_effect_bianshen"; public const string UI_SOUND_BTN_POP = "ui/ui_base_click"; public const string UI_SOUND_BUY = "ui/ui_base_buy"; public const string UI_SOUND_CHANGE_STAR = "ui/ui_effect_changestar"; public const string UI_SOUND_CLICK = "ui/ui_base_click"; public const string UI_SOUND_CLICK_STAR = "ui/ui_base_clickstar"; public const string UI_SOUND_CLOSE = "ui/ui_base_close"; public const string UI_SOUND_DRUG = "ui/ui_effect_drug"; public const string UI_SOUND_DUANZAO = "ui/ui_effect_duanzao"; public const string UI_SOUND_EQUIP_LV_UP = "ui/ui_effect_duanzaomax"; public const string UI_SOUND_EVENT_DINNER = "ui/ui_base_event_dinner"; public const string UI_SOUND_FIGHT = "ui/ui_effect_fight"; public const string UI_SOUND_GACHA10 = "ui/ui_base_gacha10"; public const string UI_SOUND_JINJIE = "ui/ui_effect_jinjie"; public const string UI_SOUND_LOSE = "ui/ui_effect_lose"; public const string UI_SOUND_LV_UP = "ui/ui_effect_levelup"; public const string UI_SOUND_LV_UP_SHORT = "ui/ui_effect_fightlvup"; public const string UI_SOUND_OPEN_BOX = "ui/ui_effect_openbox"; public const string UI_SOUND_REWARD = "ui/ui_base_reward"; public const string UI_SOUND_ROLL = "ui/ui_base_roll"; public const string UI_SOUND_SKILL_GO = "ui/ui_base_skillgo"; public const string UI_SOUND_TAB = "ui/ui_base_tab"; public const string UI_SOUND_TAB_0 = "ui/ui_base_close"; public const string UI_SOUND_WIN = "ui/ui_effect_win"; public const string UI_SOUND_WIN_POP = "ui/ui_base_click"; public const string UI_SOUND_WIN_STAR = "ui/ui_base_star"; public const string UI_SOUND_ZHAOMU = "ui/ui_effect_zhaomu"; // Methods public static void PlaySound(string soundIndex_) { if (!string.IsNullOrEmpty(soundIndex_)) { if ("ui/ui_base_tab" == soundIndex_) { PlayTabSound(); } else { AudioClip sound = AudioMngr.GetInstance().GetSound(soundIndex_); if (null != sound) { NGUITools.PlaySound(sound); } } } } private static void PlayTabSound() { AudioClip sound = AudioMngr.GetInstance().GetSound("ui/ui_base_tab"); if (null != sound) { NGUITools.PlaySound(sound); } } }