UNITY3D音频管理器
来源:互联网 发布:排列三九宫图算法 编辑:程序博客网 时间:2024/04/30 13:51
简介:在unity3d中创建公用的音频管理器,实现音频播放,并根据游戏设置中的音频开关控制音乐及音效播放
在unity3d中给gameObject添加AudioSource组件即可实现音频播放功能,但不利于统一管理,尤其是当场景中物件较多时,很难逐一开启或者关闭
最近的项目中需要可设置音乐与音效开关,为了方便统一管理自己写了一个音频管理器,主要用于以下功能:
1.将音效进行分类,每一类使用一个公用的音效播放器,统一管理场景中的音乐\音效,避免为每个物件重复添加AudioSource组件
2.避免多个2D音效同时播放,造成音效混杂刺耳
3.方便在游戏设置中对音乐/音效进行统一开关处理
4.避免因物件被销毁或禁止时造成附带音效不能正常播放
代码如下,兹以备份
using System.Collections.Generic;using UnityEngine;public class AM{ public class AudioPlayer : MonoBehaviour { public AudioSource myaudio { get; set; } public AudioType type { get; set; } } public enum AudioType { Sound = 0, Music = 1, } private static AMHelper am = (new GameObject("AMHelper")).AddComponent(); public static Dictionary apDic = new Dictionary (); public static int maxnum = 10; public static int musicOpen { get; set; } public static int soundOpen { get; set; } public static AudioPlayer AddAudioPlayer(string name, AudioType type = AudioType.Sound) { if (apDic.Count >= maxnum) { throw new System.Exception(string.Format("音频播放器数量超过{0}个限制!!!!!", maxnum)); } if (apDic.ContainsKey(name)) { Debug.Log(string.Format("{0}音频播放器已存在,无需添加", name)); return apDic[name]; } AudioPlayer newap = (new GameObject(name)).AddComponent () as AudioPlayer; apDic.Add(name, newap); newap.myaudio = newap.gameObject.AddComponent () as AudioSource; newap.type = type; newap.myaudio.playOnAwake = false; newap.transform.parent = am.transform; return newap; } public static void RemoveAduioPlayer(string name) { AudioPlayer audioFMS = apDic[name]; apDic.Remove(name); Object.Destroy(audioFMS.gameObject); } public static bool AudioIsOpen(AudioPlayer ap) { if (musicOpen.GetPref(PrefKeys.musicOpen) == 0 && ap.type == AudioType.Music) return false; else if (soundOpen.GetPref(PrefKeys.soundOpen) == 0 && ap.type == AudioType.Sound) return false; else return true; } //音频播放(可响应音乐/音效开关控制) public static void Play(string apname, string clippath, bool setloop = false) { AudioPlayer ap = apDic[apname]; //判断音频或者音效开关是否打开 if (!AudioIsOpen(ap)) return; //如果是打开的才执行下面的播放 if (!ap.myaudio.isPlaying || ap.myaudio.loop != setloop) { ap.myaudio.clip = Resources.Load (clippath); ap.myaudio.Play(); } else ap.myaudio.PlayOneShot(Resources.Load (clippath)); ap.myaudio.loop = setloop; } public static void Continue(string apname) { AudioPlayer ap = apDic[apname]; //判断音频或者音效开关是否打开 if (!AudioIsOpen(ap)) return; //如果是打开的才执行下面的播放 ap.myaudio.Play(); } public static AudioSource GetAudio(string apname) { AudioPlayer getap = null; if(apDic.TryGetValue(apname,out getap)) return getap.myaudio; else throw new System.Exception("没有这个播放器"); } public static void CleanUp() { if (apDic.Count == 0) return; foreach(KeyValuePair pair in apDic) { Object.Destroy(pair.Value.gameObject); apDic.Remove(pair.Key); } }}public class AMHelper : MonoBehaviour{ public void Awake() { DontDestroyOnLoad(gameObject); }}
0 0
- UNITY3D音频管理器
- 自行设计的音频管理器
- Moblin 内核 -- 音频管理器
- Android 音频管理器AudioManager
- android音频管理器(AudioManager)
- android音频管理器(AudioManager)
- 音频管理器AudioManager笔记
- 音频管理器 AudioManager
- android音频管理器(AudioManager)
- AudioManager音频管理器
- android AudioManager音频管理器
- unity音频管理器
- 【Unity3D】 EventManager事件管理器
- Unity3d中插入音频
- Unity3d学习之音频
- Unity3D音频的制作
- unity3D 音频播放
- Unity3D的音频添加
- Activiti小知识总结
- css 水平和垂直居中 js 引用外部css
- Activiti根据Flowname进行转向
- java map转javaBean 反射参数异常处理
- redigo代码分析-pool
- UNITY3D音频管理器
- MySQL笔记 一
- Oracle事物中的savepoint
- java网络编程
- 接口测试及httpclient深入
- Spring MVC总结
- C++结构体与指针
- oracle 变量使用
- android studio无法识别含有rcs包名的jar