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 Functionvoid 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了

直接看代码吧

Unity 项目中的音效管理器相关推荐

  1. 【Unity植物大战僵尸】音效管理器开发(二十四)

    42.音效管理器开发 导入资源 整理一下GameManager.cs,因为这个脚本要在两个场景中都共用,所以需要把CurrLV相关的移植到LVManager.cs中去,这里就不显示了,说下如何共用,首 ...

  2. [团队] 在Unity项目中使用FMOD来管理你的音效

    Hello各位小伙伴, 今天来聊一下Unity项目中的音效管理. 我目前正在研发的项目, 使用了FMOD的来管理音效和背景音乐. FMOD本身是一款免费的音频集成工具. 自身的音效编辑器还拥有强大的编 ...

  3. U3D客户端框架之 音效管理器 与 Fmod介绍安装导入Unity

    一.Fmod介绍与安装导入Unity 1.Fmod与Unity内置Audio播放器对比 Unity内置的Audio底层使用的是FMOD,但是功能不够齐全,高级一点的功能如混合(Mix)等无法使用: 音 ...

  4. unity音效管理器

    unity游戏制作时,经常需要播放音效,如果没有一个音效管理类,随时随地都可以播放音乐,不利于代码的管理.我们可以将所有关于音效集中到一个管理类当中,可以将这个音效管理器写成单例,也可以将它当作一个模 ...

  5. Unity 音效管理器编辑窗口的创建和Manager的创建

    一.音效管理器面板的创建 1.首先要继承EditorWindow,然后再静态方法里创建窗口编辑器. [MenuItem("Manager/AudioManager")] stati ...

  6. Unity中的音效管理

    音效管理 大量的重复音效调用 图表示意 音效对象 管理器 大量的重复音效调用 在应用中特别是游戏中,经常有大量的音效触发,音效挂在在对应的预制件上又不方便进行管理,我的办法是动态的创建所需的音效组件, ...

  7. Unity 项目中资源管理(续)

    转载自:https://zhuanlan.zhihu.com/p/28324190 上次和大家分享了Unity项目中的资源管理主要讲资源配置以及资源配置工具,Unity资源配置在资源管理中处于基础地位 ...

  8. unity5.6.4安装包_Unity 2020.1中的软件包管理器更新

    unity5.6.4安装包 As more features in different stages of development move into packages, choosing the r ...

  9. 在中间层 .NET 应用程序中通过授权管理器使用基于角色的安全

    基于角色的安全是从 Windows NT 的第一个版本开始在 Windows 平台上发展而来的.使用角色,操作系统可以通过检查称为 BUILTIN\Administrators 的组的安全上下文做出一 ...

最新文章

  1. 备份一张iPhone拍照写入exif中的orientation图片
  2. python是基于哪个系统的_python能检测到它运行的是哪个操作系统?
  3. 使用CDN之后APACHE日志记录中IP地址不正确的解决方案
  4. TCP 通信过程中各步骤的状态
  5. GTD时间管理---非行动性
  6. 在Spring中了解事务注释
  7. 【2016年第6期】21世纪天文学面临的大数据和研究范式转型
  8. 后序遍历(非递归)☆
  9. 餐饮创业想赚钱,这5个思维方式少不了
  10. 软件测试52讲-测试新技术篇
  11. 以前的某个程序安装已在安装计算机上创建挂起的文件操作。运行安装程序之前必须重新启动计算机...
  12. 数据结构和算法:线性表链式存储的简单实现
  13. LINUX下载编译libreadline
  14. MySQL是怎样运行的(实体书扫描+掘金小册)免费下载
  15. 中国石油大学(北京)-《安全检测与监测》第一阶段在线作业
  16. mongo数据库创建用户
  17. 实战技法 - 短线操盘 (1)
  18. matlab仿真培训班,Matlab/Simulink进行微网系统仿真建模培训
  19. python求和函数1-n_python 用for循环实现1~n求和的实例
  20. 解释深度学习在安全领域中的应用

热门文章

  1. Python爬虫怎么挣钱?6个Python爬虫赚钱方式,搞搞副业不是问题
  2. B2C电商网站调用第三方支付平台流程
  3. 练习:药店销售数据分析
  4. Android百度地图调用和GPS定位
  5. Web基础配置篇(十二): Elasticsearch的安装配置及入门使用
  6. udacity 前端进阶项目1 过河游戏
  7. 上海亚商投顾:市场继续缩量调整 汽车、光伏板块领涨
  8. Magix Music Maker 2023评测
  9. windows10系统添加美式键盘
  10. Highcharts 散点图上添加回归线