unity音频管理器
来源:互联网 发布:数据分析师考试大纲 编辑:程序博客网 时间:2024/04/30 08:41
using UnityEngine;using System.Collections;public delegate void AudioPlayEnd();/** @ 创建时间:* @ 作者:想开店的程序员* @ 修改人:* @ 修改时间:* @ 描述:自定义音频辅助播放(必需)* @///////////////////////////////////*/public class CustomAudioSource : MonoBehaviour{ void Awake() { DontDestroyOnLoad(gameObject); } public void Play(AudioSource audioSource, AudioClip clip, Transform emitter, float volume, float pitch, bool loop, AudioPlayEnd callback = null) { if (emitter == null) { StartCoroutine(PlayI(audioSource, clip, volume, pitch, loop, callback)); } else { StartCoroutine(PlayII(clip, emitter, volume, pitch, loop, callback)); } } IEnumerator PlayI(AudioSource audioSource, AudioClip clip, float volume, float pitch, bool loop, AudioPlayEnd callback) { audioSource.clip = clip; audioSource.volume = volume; audioSource.pitch = pitch; audioSource.loop = loop; audioSource.Play(); yield return new WaitForSeconds(clip.length); //音频播放完毕后执行的方法 if (callback != null) callback(); } IEnumerator PlayII(AudioClip clip, Transform emitter, float volume, float pitch, bool loop, AudioPlayEnd callback = null) { GameObject go = new GameObject("Audio:" + clip.name); go.transform.position = emitter.position; go.transform.parent = emitter; AudioSource source = go.AddComponent<AudioSource>(); source.clip = clip; source.volume = volume; source.pitch = pitch; source.loop = loop; source.Play(); if (!loop) { DestroyObject(go, clip.length); yield return new WaitForSeconds(clip.length); //音频播放完毕后执行的方法 if (callback != null) callback(); } } void OnDestoryed() { }}
using UnityEngine;using System.Collections;using System.Collections.Generic;/** @ 创建时间:* @ 作者:想开店的程序员* @ 修改人:* @ 修改时间:* @ 描述:音频管理器,注:音频文件一定要放在Resources/Audio文件夹下,不然无法播放* @/////////////////////////////////////*/public class AudioManager{ private Dictionary<string, AudioClip> soundDicts = new Dictionary<string, AudioClip>(); private AudioSource _AudioSource; private CustomAudioSource _cas; /// <summary> /// 单例模式 /// </summary> private static AudioManager Instance; public static AudioManager GetInstance() { if (Instance == null) { Instance = new AudioManager(); GameObject audioSource = new GameObject("Audios"); Instance._AudioSource = audioSource.AddComponent<AudioSource>(); Instance._cas = audioSource.AddComponent<CustomAudioSource>(); } return Instance; } /// <summary> /// 通过文件名播放音乐 /// </summary> /// <param name='fileName'> /// File name. /// </summary> public void PlayByName(string fileName) { ///判断字典中是否存在该文件,不存在则加载 AudioClip _PlayClip = FindClipByName(fileName); _cas.Play(_AudioSource, _PlayClip, null, 1f, 1f, false); Debug.Log("AudioManager::Play().PlayByName"); } public void PlayByName(string fileName, bool isloop) { ///判断字典中是否存在该文件,不存在则加载 AudioClip _PlayClip = FindClipByName(fileName); _cas.Play(_AudioSource, _PlayClip, null, 1f, 1f, isloop); Debug.Log("AudioManager::Play().PlayByName。loop:" + isloop); } /// <summary> /// 播放音频,完成后执行回调函数 /// </summary> /// <param name="fileName"></param> /// <param name="callback"></param> public void PlayByName(string fileName, AudioPlayEnd callback) { ///判断字典中是否存在该文件,不存在则加载 AudioClip _PlayClip = FindClipByName(fileName); _cas.Play(_AudioSource, _PlayClip, null, 1f, 1f, false, callback); Debug.Log("AudioManager::Play().PlayByName.callback"); } /// <summary> /// 在emitter下播放一个音频 /// </summary> /// <param name="fileName"></param> /// <param name="emitter"></param> public void PlayByName(string fileName, Transform emitter) { ///判断字典中是否存在该文件,不存在则加载 AudioClip _PlayClip = FindClipByName(fileName); _cas.Play(_AudioSource, _PlayClip, emitter, 1f, 1f, false); Debug.Log("AudioManager::Play().PlayByName.emitter"); } public void PlayByName(string fileName, Transform emitter, bool isloop) { ///判断字典中是否存在该文件,不存在则加载 AudioClip _PlayClip = FindClipByName(fileName); _cas.Play(_AudioSource, _PlayClip, emitter, 1f, 1f, isloop); Debug.Log("AudioManager::Play().PlayByName.emitter.isloop" + isloop); } public void PlayByName(string fileName, Transform emitter, float volume, bool isloop) { ///判断字典中是否存在该文件,不存在则加载 AudioClip _PlayClip = FindClipByName(fileName); _cas.Play(_AudioSource, _PlayClip, emitter, volume, 1f, isloop); Debug.Log("AudioManager::Play().PlayByName.emitter.volume.isloop" + isloop); } public void PlayByName(string fileName, Transform emitter, bool isloop, AudioPlayEnd callback) { ///判断字典中是否存在该文件,不存在则加载 AudioClip _PlayClip = FindClipByName(fileName); _cas.Play(_AudioSource, _PlayClip, emitter, 1f, 1f, isloop, callback); Debug.Log("AudioManager::Play().PlayByName.emitter.isloop" + isloop + ". callback"); } public void PlayByName(string fileName, Transform emitter, float volume, float pitch, bool isloop) { ///判断字典中是否存在该文件,不存在则加载 AudioClip _PlayClip = FindClipByName(fileName); _cas.Play(_AudioSource, _PlayClip, emitter, volume, pitch, isloop); Debug.Log("AudioManager::Play().PlayByName.emitter.volume.pitch.isloop" + isloop); } public void PlayByName(string fileName, Transform emitter, float volume, float pitch, bool isloop, AudioPlayEnd callback) { ///判断字典中是否存在该文件,不存在则加载 AudioClip _PlayClip = FindClipByName(fileName); _cas.Play(_AudioSource, _PlayClip, emitter, volume, pitch, isloop, callback); Debug.Log("AudioManager::Play().PlayByName"); } /// <summary> /// 通过音频文件播放音乐 /// </summary> /// <param name="clip">AudioClip类型文件</param> public void PlayByClip(AudioClip clip) { if (!soundDicts.ContainsKey(clip.name)) { soundDicts.Add(clip.name, clip); } _cas.Play(_AudioSource, clip, null, 1f, 1f, false); Debug.Log("AudioManager::Play().PlayByClip"); } public void PlayByClip(AudioClip clip, AudioPlayEnd callback) { if (!soundDicts.ContainsKey(clip.name)) { soundDicts.Add(clip.name, clip); } _cas.Play(_AudioSource, clip, null, 1f, 1f, false, callback); Debug.Log("AudioManager::Play().PlayByClip.callback"); } /// <summary> /// 通过文件名查找音频文件,并自动添加到字典中 /// </summary> /// <param name="fileName"></param> /// <returns></returns> public AudioClip FindClipByName(string fileName) { if (!soundDicts.ContainsKey(fileName)) { AudioClip _playClip = Resources.Load("Audio/" + fileName) as AudioClip; soundDicts.Add(fileName, _playClip); return _playClip; } else { return soundDicts[fileName]; } } /// <summary> /// 返回一个音频的播放时间 /// </summary> /// <param name="fileName"></param> /// <returns></returns> public float SoundLength(string fileName) { AudioClip _PlayClip = FindClipByName(fileName); return _PlayClip.length; } public void ForceKill() { GameObject.Destroy(Instance._cas.gameObject); Instance._cas = null; Instance = null; }}
调用方法示例
using UnityEngine;using System.Collections;public class test : MonoBehaviour { public AudioClip clip; public Transform obj; // Use this for initialization void Start () { DontDestroyOnLoad(gameObject); } // Update is called once per frame void Update () { if (Input.GetKeyDown(KeyCode.Alpha1)) { AudioManager.GetInstance().PlayByName("FarExplosionA"); } if (Input.GetKeyDown(KeyCode.Alpha2)) { AudioManager.GetInstance().PlayByName("FarExplosionA", false); } if (Input.GetKeyDown(KeyCode.Alpha3)) { AudioManager.GetInstance().PlayByName("FarExplosionA", tester); } if (Input.GetKeyDown(KeyCode.Alpha4)) { AudioManager.GetInstance().PlayByName("FarExplosionA", obj); } if (Input.GetKeyDown(KeyCode.Alpha5)) { AudioManager.GetInstance().PlayByName("FarExplosionA", obj, false); } if (Input.GetKeyDown(KeyCode.Alpha6)) { AudioManager.GetInstance().PlayByName("FarExplosionA", obj, false, tester); } if (Input.GetKeyDown(KeyCode.Alpha7)) { AudioManager.GetInstance().PlayByClip(clip, tester); } if (Input.GetKeyDown(KeyCode.A)) { Application.LoadLevel(1); } } public void tester() { Debug.Log("音频播放完毕,回调函数执行"); }}
0 0
- unity音频管理器
- Unity 音频
- 自行设计的音频管理器
- Moblin 内核 -- 音频管理器
- Android 音频管理器AudioManager
- android音频管理器(AudioManager)
- android音频管理器(AudioManager)
- 音频管理器AudioManager笔记
- 音频管理器 AudioManager
- android音频管理器(AudioManager)
- AudioManager音频管理器
- android AudioManager音频管理器
- UNITY3D音频管理器
- Unity定时任务管理器
- unity音频管理
- unity音频管理类
- Unity 音频管理
- Unity插入视频音频
- Andorid 支付宝调起H5页面异常 系统繁忙4000
- MPAndroidChart之PieChart源码分析
- javascript对象创建模式
- 使用Spark遇到的一些坑
- iOS 真正的流音频秒播 边缓冲边播放 DOUAudioStreamer框架
- unity音频管理器
- JAVA之Swing程序设计
- HDU 6029 Graph Theory
- lvs-dr模式 安装配置
- Android自定义View之ScrollViewforListView(解决ScrollView嵌套listview,listview不能滑动)
- angularjs中compile的用法
- c++笔试题
- VR 开发笔记:信息呈现,交互
- 从零开始的C++ opencv的人脸识别程序——人脸检测