Unity 项目中的音效管理器
来源:互联网 发布:知豆新能源汽车图片 编辑:程序博客网 时间:2024/06/05 05:20
using UnityEngine;using System.Collections;using System.Collections.Generic;/// <summary>/// *音乐管理器/// *2016/3/14/// /// </summary>/// public class AudioController : MonoBehaviour{ public static AudioController Instance = null; private Dictionary<string, int> AudioDictionary = new Dictionary<string , int>(); private const int MaxAudioCount = 10; private const string ResourcePath = "Audio/"; private const string StreamingAssetsPath = ""; private AudioSource BGMAudioSource; private AudioSource LastAudioSource; #region Mono Function void Awake() { if(Instance == null) { Instance = this; DontDestroyOnLoad(this.gameObject); } else { if(Instance != this) { Destroy(transform.gameObject); } } } #endregion /// <summary> /// 播放 /// </summary> /// <param name="audioname"></param> public void SoundPlay(string audioname, float volume = 1) { if (AudioDictionary.ContainsKey(audioname)) { if (AudioDictionary[audioname] <= MaxAudioCount) { AudioClip sound = this.GetAudioClip(audioname); if (sound != null) { StartCoroutine(this.PlayClipEnd(sound, audioname)); this.PlayClip(sound, volume); AudioDictionary[audioname]++; } } } else { AudioDictionary.Add(audioname, 1); AudioClip sound = this.GetAudioClip(audioname); if (sound != null) { StartCoroutine(this.PlayClipEnd(sound, audioname)); this.PlayClip(sound, volume); AudioDictionary[audioname]++; } } } /// <summary> /// 暂停 /// </summary> /// <param name="audioname"></param> public void SoundPause(string audioname) { if (this.LastAudioSource!=null) { this.LastAudioSource.Pause(); } } /// <summary> /// 暂停所有音效音乐 /// </summary> public void SoundAllPause() { AudioSource[] allsource = FindObjectsOfType<AudioSource>(); if (allsource!=null&&allsource.Length>0) { for (int i = 0; i < allsource.Length; i++) { allsource[i].Pause(); } } } /// <summary> /// 停止特定的音效 /// </summary> /// <param name="audioname"></param> public void SoundStop(string audioname) { GameObject obj= this.transform.FindChild("audioname").gameObject; if (obj!=null) { Destroy(obj); } } /// <summary> /// 设置音量 /// </summary> public void BGMSetVolume(float volume) { if (this.BGMAudioSource!=null) { this.BGMAudioSource.volume = volume; } } /// <summary> /// 播放背景音乐 /// </summary> /// <param name="bgmname"></param> /// <param name="volume"></param> public void BGMPlay(string bgmname,float volume=1f) { BGMStop(); if (bgmname!=null) { AudioClip bgmsound = this.GetAudioClip(bgmname); if (bgmsound!=null) { this.PlayLoopBGMAudioClip(bgmsound, volume); } } } /// <summary> /// 暂停背景音乐 /// </summary> public void BGMPause() { if (this.BGMAudioSource!=null) { this.BGMAudioSource.Pause(); } } /// <summary> /// 停止背景音乐 /// </summary> public void BGMStop() { if (this.BGMAudioSource != null && this.BGMAudioSource.gameObject) { Destroy(this.BGMAudioSource.gameObject); this.BGMAudioSource = null; } } /// <summary> /// 重新播放 /// </summary> public void BGMReplay() { if (this.BGMAudioSource!=null) { this.BGMAudioSource.Play(); } } #region 音效资源路径 enum eResType { AB=0, CLIP=1 } /// <summary> /// 下载音效 /// </summary> /// <param name="aduioname"></param> /// <param name="type"></param> /// <returns></returns> private AudioClip GetAudioClip(string aduioname, eResType type = eResType.CLIP) { AudioClip audioclip = null; switch (type) { case eResType.AB: break; case eResType.CLIP: audioclip = GetResAudioClip(aduioname); break; default: break; } return audioclip; } private IEnumerator GetAbAudioClip(string aduioname) { yield return null; } private AudioClip GetResAudioClip(string aduioname) { return Resources.Load(ResourcePath + aduioname) as AudioClip; } #endregion #region 背景音乐 /// <summary> /// 背景音乐控制器 /// </summary> /// <param name="audioClip"></param> /// <param name="volume"></param> /// <param name="isloop"></param> /// <param name="name"></param> private void PlayBGMAudioClip(AudioClip audioClip, float volume=1f,bool isloop=false,string name=null) { if (audioClip==null) { return; } else { GameObject obj = new GameObject(name); obj.transform.parent = this.transform; AudioSource LoopClip = obj.AddComponent<AudioSource>(); LoopClip.clip = audioClip; LoopClip.volume = volume; LoopClip.loop = true; LoopClip.pitch = 1f; LoopClip.Play(); this.BGMAudioSource = LoopClip; } } /// <summary> /// 播放一次的背景音乐 /// </summary> /// <param name="audioClip"></param> /// <param name="volume"></param> /// <param name="name"></param> private void PlayOnceBGMAudioClip(AudioClip audioClip, float volume = 1f, string name = null) { PlayBGMAudioClip(audioClip, volume, false, name == null ? "BGMSound" : name); } /// <summary> /// 循环播放的背景音乐 /// </summary> /// <param name="audioClip"></param> /// <param name="volume"></param> /// <param name="name"></param> private void PlayLoopBGMAudioClip(AudioClip audioClip, float volume = 1f, string name = null) { PlayBGMAudioClip(audioClip, volume, true, name==null?"LoopSound":name); } #endregion #region 音效 /// <summary> /// 播放音效 /// </summary> /// <param name="audioClip"></param> /// <param name="volume"></param> /// <param name="name"></param> private void PlayClip(AudioClip audioClip,float volume=1f,string name=null) { if (audioClip==null) { return; } else { GameObject obj = new GameObject(name == null ? "SoundClip" : name); obj.transform.parent = this.transform; AudioSource source = obj.AddComponent<AudioSource>(); StartCoroutine(this.PlayClipEndDestroy(audioClip,obj)); source.pitch = 1f; source.volume = volume; source.clip = audioClip; source.Play(); this.LastAudioSource = source; } } /// <summary> /// 播放玩音效删除物体 /// </summary> /// <param name="audioclip"></param> /// <param name="soundobj"></param> /// <returns></returns> private IEnumerator PlayClipEndDestroy(AudioClip audioclip, GameObject soundobj) { if (soundobj == null||audioclip==null) { yield break; } else { yield return new WaitForSeconds (audioclip.length * Time.timeScale); Destroy(soundobj); } } /// <summary> /// /// </summary> /// <returns></returns> private IEnumerator PlayClipEnd(AudioClip audioclip,string audioname) { if (audioclip!=null) { yield return new WaitForSeconds(audioclip.length * Time.timeScale); AudioDictionary[audioname]--; if (AudioDictionary[audioname]<=0) { AudioDictionary.Remove(audioname); } } yield break; } #endregion}
最近在做增强现实的项目写了一个音效管理的类 来管理项目中音效:
使用起来也比较简单:
在启动场景中 添加 空物体 添加AudioListen 组件 添加这个代码组件就OK了
直接看代码吧
0 0
- Unity 项目中的音效管理器
- Unity 简单的音效管理器
- Unity编程笔记----音效管理器
- Unity音效
- unity 项目开发时,音效的开启开关
- unity音效audio
- Unity 音效管理
- Unity添加音效与音效衰减
- 关于Unity音乐音效管理
- Unity 5 音效二 AudioMixer
- unity播放音效(一)
- Unity中播放音效/音乐
- Unity 导入下载音效出错
- 关于 Unity 音乐音效管理
- 【精华分享】【Unity&独立游戏&音效】免费音效网站总览
- unity音频管理器
- Unity定时任务管理器
- unity音效插件—— FMOD学习
- Java集合框架:Arrays工具类
- android错误总结
- Tomcat迁移到weblogic的几个问题
- android中延时操作三种方式
- FMDB的使用
- Unity 项目中的音效管理器
- storm-0.8.2源码分析1之nimbus启动
- Ubuntu下怎么安装openjdk
- UNICODE,UTF-8,UTF-16
- SQL Server 插入空间数据
- 新手学习记录1:makefile学习实践
- Oracle学习笔记2 ---- 连接数据库
- 轻松学习jQuery插件EasyUI EasyUI创建树形菜单
- Javascript 找到子元素在父元素内的相对位置