04、Unity_声音管理器
1、分享一个Unity中用于管理声音的声音管理器,适合于中小型项目。
2、借鉴了很多的源码,最后修改完成,吸取百家之长,改为自己所用。
3、源码如下:
- /*
- *
- * 开发时间:2018.11.20
- *
- * 功能:用来对项目中的所有音频做同一的管理
- *
- * 描述:
- * 1、挂载该脚本的游戏物体上要挂载三个AudioSouce[可以修改脚本,动态挂]
- * 2、建议大的背景音乐不要加入AudioClip[],对内存消耗大。而是哪里用到,单独使用PlayBackground函数播放
- * 3、小的音效片段可以将其加入AudioClip[]中,可以很方便的管理,可以通过声音剪辑、声音剪辑名称来进行音乐的播放
- * 4、该声音管理可以进行背景音乐的播放、音效的播放、背景音乐的音调改变、音效的音调改变、停止播放
- *
- */
- using UnityEngine;
- using System.Collections;
- using System.Collections.Generic;
- namespace Kernal
- {
- public class AudioManager : MonoBehaviour
- {
- public AudioClip[] AudioClipArray; //剪辑数组
- public static float AudioBackgroundVolumns = 1F; //背景音量
- public static float AudioEffectVolumns = 1F; //音效音量
- public static float AudioBackgroundPitch = 1f; //背景音乐的音调
- public static float AudioEffectPitch = 1.0f; //音效的音调
- private static Dictionary<string, AudioClip> _DicAudioClipLib; //音频库,将声音名字和声音资源进行关联
- private static AudioSource[] _AudioSourceArray; //音频源数组
- private static AudioSource _AudioSource_BackgroundAudio; //背景音乐
- private static AudioSource _AudioSource_AudioEffectA; //音效源A
- private static AudioSource _AudioSource_AudioEffectB; //音效源B
- //......可以按需求进行添加
- /// <summary>
- /// 音效库资源加载
- /// </summary>
- void Awake()
- {
- //音频库加载[初始化,将音乐剪辑和名字联系起来]
- _DicAudioClipLib = new Dictionary<string, AudioClip>();
- foreach (AudioClip audioClip in AudioClipArray)
- {
- _DicAudioClipLib.Add(audioClip.name, audioClip);
- }
- //处理音频源,也就是得到用来播放声音的音乐播放器
- _AudioSourceArray = this.GetComponents<AudioSource>();
- _AudioSource_BackgroundAudio = _AudioSourceArray[]; //其中一个用来播放背景音乐
- _AudioSource_AudioEffectA = _AudioSourceArray[]; //其中一个用来播放音乐1
- _AudioSource_AudioEffectB = _AudioSourceArray[];
- //从数据持久化中得到音量数值
- if (PlayerPrefs.GetFloat("AudioBackgroundVolumns") >= )
- {
- AudioBackgroundVolumns = PlayerPrefs.GetFloat("AudioBackgroundVolumns");
- _AudioSource_BackgroundAudio.volume = AudioBackgroundVolumns;
- }
- if (PlayerPrefs.GetFloat("AudioEffectVolumns") >= )
- {
- AudioEffectVolumns = PlayerPrefs.GetFloat("AudioEffectVolumns");
- _AudioSource_AudioEffectA.volume = AudioEffectVolumns;
- _AudioSource_AudioEffectB.volume = AudioEffectVolumns;
- }
- //设置音乐的音效
- if (PlayerPrefs.HasKey("AudioBackgroundPitch"))
- {
- AudioBackgroundPitch = PlayerPrefs.GetFloat("AudioBackgroundPitch");
- }
- if (PlayerPrefs.HasKey("AudioEffectPitch"))
- {
- AudioEffectPitch = PlayerPrefs.GetFloat("AudioEffectPitch");
- }
- _AudioSource_BackgroundAudio.pitch = AudioBackgroundPitch;
- _AudioSource_AudioEffectA.pitch = AudioEffectPitch;
- _AudioSource_AudioEffectB.pitch = AudioEffectPitch;
- }
- /// <summary>
- /// 播放背景音乐
- /// 传入的参数是背景音乐的AudioClip
- /// </summary>
- /// <param name="audioClip">音频剪辑</param>
- public static void PlayBackground(AudioClip audioClip)
- {
- //防止背景音乐的重复播放。
- if (_AudioSource_BackgroundAudio.clip == audioClip)
- {
- return;
- }
- //处理全局背景音乐音量
- _AudioSource_BackgroundAudio.volume = AudioBackgroundVolumns;
- _AudioSource_BackgroundAudio.pitch = AudioBackgroundPitch;
- if (audioClip)
- {
- _AudioSource_BackgroundAudio.loop = true; //背景音乐是循环播放的
- _AudioSource_BackgroundAudio.clip = audioClip;
- _AudioSource_BackgroundAudio.Play();
- }
- else
- {
- Debug.LogWarning("[AudioManager.cs/PlayBackground()] audioClip==null !");
- }
- }
- /// <summary>
- /// 播放背景音乐
- /// 传入的参数是声音片段的名字,要注意,其声音片段要加入声音数组中
- /// </summary>
- /// <param name="strAudioName"></param>
- public static void PlayBackground(string strAudioName)
- {
- if (!string.IsNullOrEmpty(strAudioName))
- {
- PlayBackground(_DicAudioClipLib[strAudioName]);
- }
- else
- {
- Debug.LogWarning("[AudioManager.cs/PlayBackground()] strAudioName==null !");
- }
- }
- /// <summary>
- /// 播放音效_音频源A
- /// </summary>
- /// <param name="audioClip">音频剪辑</param>
- public static void PlayAudioEffectA(AudioClip audioClip)
- {
- //处理全局音效音量
- _AudioSource_AudioEffectA.volume = AudioEffectVolumns;
- _AudioSource_AudioEffectA.pitch = AudioEffectPitch;
- if (audioClip)
- {
- _AudioSource_AudioEffectA.clip = audioClip;
- _AudioSource_AudioEffectA.Play();
- }
- else
- {
- Debug.LogWarning("[AudioManager.cs/PlayAudioEffectA()] audioClip==null ! Please Check! ");
- }
- }
- /// <summary>
- /// 播放音效_音频源A
- /// </summary>
- /// <param name="strAudioEffctName">音效名称</param>
- public static void PlayAudioEffectA(string strAudioEffctName)
- {
- if (!string.IsNullOrEmpty(strAudioEffctName))
- {
- PlayAudioEffectA(_DicAudioClipLib[strAudioEffctName]);
- }
- else
- {
- Debug.LogWarning("[AudioManager.cs/PlayAudioEffectA()] strAudioEffctName==null ! Please Check! ");
- }
- }
- /// <summary>
- /// 播放音效_音频源B
- /// </summary>
- /// <param name="audioClip">音频剪辑</param>
- public static void PlayAudioEffectB(AudioClip audioClip)
- {
- //处理全局音效音量
- _AudioSource_AudioEffectB.volume = AudioEffectVolumns;
- _AudioSource_AudioEffectB.pitch = AudioEffectPitch;
- if (audioClip)
- {
- _AudioSource_AudioEffectB.clip = audioClip;
- _AudioSource_AudioEffectB.Play();
- }
- else
- {
- Debug.LogWarning("[AudioManager.cs/PlayAudioEffectB()] audioClip==null ! Please Check! ");
- }
- }
- /// <summary>
- /// 播放音效_音频源B
- /// </summary>
- /// <param name="strAudioEffctName">音效名称</param>
- public static void PlayAudioEffectB(string strAudioEffctName)
- {
- if (!string.IsNullOrEmpty(strAudioEffctName))
- {
- PlayAudioEffectB(_DicAudioClipLib[strAudioEffctName]);
- }
- else
- {
- Debug.LogWarning("[AudioManager.cs/PlayAudioEffectB()] strAudioEffctName==null ! Please Check! ");
- }
- }
- /// <summary>
- /// 停止播放音效A
- /// </summary>
- public static void StopPlayAudioEffectA()
- {
- _AudioSource_AudioEffectA.Stop();
- }
- /// <summary>
- /// 停止播放音效B
- /// </summary>
- public static void StopPlayAudioEffectB()
- {
- _AudioSource_AudioEffectB.Stop();
- }
- /// <summary>
- /// 停止播放背景音乐
- /// </summary>
- public static void StopPlayAudioBackGround()
- {
- _AudioSource_BackgroundAudio.Stop();
- }
- /// <summary>
- /// 改变背景音乐音量
- /// </summary>
- /// <param name="floAudioBGVolumns"></param>
- public static void SetAudioBackgroundVolumns(float floAudioBGVolumns)
- {
- _AudioSource_BackgroundAudio.volume = floAudioBGVolumns;
- AudioBackgroundVolumns = floAudioBGVolumns;
- //数据持久化
- PlayerPrefs.SetFloat("AudioBackgroundVolumns", floAudioBGVolumns);
- }
- /// <summary>
- /// 改变音效音量
- /// </summary>
- /// <param name="floAudioEffectVolumns"></param>
- public static void SetAudioEffectVolumns(float floAudioEffectVolumns)
- {
- _AudioSource_AudioEffectA.volume = floAudioEffectVolumns;
- _AudioSource_AudioEffectB.volume = floAudioEffectVolumns;
- AudioEffectVolumns = floAudioEffectVolumns;
- //数据持久化
- PlayerPrefs.SetFloat("AudioEffectVolumns", floAudioEffectVolumns);
- }
- /// <summary>
- /// 改变背景音乐的音调
- /// </summary>
- /// <param name="floAudioBGPichs">改变的音调值</param>
- public static void SetAudioBackgroundPitch(float floAudioBGPitchs)
- {
- _AudioSource_BackgroundAudio.pitch = floAudioBGPitchs;
- //数据持久化
- PlayerPrefs.SetFloat("AudioBackgroundPitch", floAudioBGPitchs);
- }
- /// <summary>
- /// 改变音效的音调
- /// </summary>
- /// <param name="floAudioEffectPitchs">音效的音调值</param>
- public static void SetAudioEffectPitch(float floAudioEffectPitchs)
- {
- _AudioSource_AudioEffectA.pitch = floAudioEffectPitchs;
- _AudioSource_AudioEffectB.pitch = floAudioEffectPitchs;
- //数据持久化
- PlayerPrefs.SetFloat("AudioEffectPitch", floAudioEffectPitchs);
- }
- }
- }
04、Unity_声音管理器的更多相关文章
- Android之声音管理器《AudioManager》的使用以及音量控制
以下为网上下载然后拼接-- Android声音管理AudioManager使用 手机都有声音模式,声音.静音还有震动,甚至震动加声音兼备,这些都是手机的基本功能.在Android手机中,我们同样可以通 ...
- 电脑没有声音,显示“未插入耳机或扬声器”,检测不到Realtek高清晰音频管理器
2018-7-16,电脑彻夜未关,早上发现已经死机了.关机重启之后,就发现没有声音了,提示“未插入耳机或扬声器”,并且检测不到Realtek高清晰音频管理器,只能检查到显卡音频输出.首先,音箱在其他电 ...
- 故障解决 | win10没声音及找不到Realtek高清音频管理器
重装 win10 系统后,电脑没声音,更新驱动以及万不得已下载驱动精灵都没有解决. 后来发现在“硬件和声音”中没有Realtek高清音频管理器,之后找到解决办法如下: 1. 找到Realtek高清音频 ...
- Ubuntu 18.04图形化软件包管理器
1.ubuntu软件这个管理工具提供了一种管理您系统中软件的好方法,通过他可以很直观的查找软件安装很简单,打开终端,输入以下命令:----------------------------------- ...
- 04 Vue Router路由管理器
路由的基本概念与原理 Vue Router Vue Router (官网: https://router.vuejs.org/zh/)是Vue.js 官方的路由管理器. 它和vue.js的核心深度集成 ...
- 翻译《Writing Idiomatic Python》(五):类、上下文管理器、生成器
原书参考:http://www.jeffknupp.com/blog/2012/10/04/writing-idiomatic-python/ 上一篇:翻译<Writing Idiomatic ...
- Oracle 11g 中恢复管理器RMAN介绍
这是我平时摘录的笔记,从管理艺术那本书上摘录出来的,放到这里 RMAN 可在数据库服务器的帮助下从数据库内备份数据文件,可构造数据文件映像副本.控制文件和控制文件映像.对当日志 SPFILE 和RMA ...
- 已禁用对分布式事务管理器(MSDTC)的网络访问。请使用组件服务管理工具启用 DTC 以便在 MSDTC 安全配置中进行网络访问。
今天写ASP.NET程序,在网页后台的c#代码里写了个事务,事务内部对一张表进行批量插入,对另外一张表进行查询与批量插入. 结果第二张表查询后foreach迭代操作时报错:已禁用对分布式事务管理器(M ...
- AudioManager音频管理器
AudioManager音频管理器提供了如下几种常用方法来控制手机音频: 1.adjustStreamVolume(int StreamType,int direction,int flgs):调整手 ...
随机推荐
- Git版本回退的最佳方式
使用git开发的过程中,存在误提交的时候怎么办呢?不用慌张,强大的git提供了两种版本回退的方式,可以让你恢复提交之前的内容: 方式一:reset(不推荐) 通过reset的方式,把head指针指向之 ...
- bzoj 2762: [JLOI2011]不等式组——树状数组
旺汪与旺喵最近在做一些不等式的练习.这些不等式都是形如ax+b>c 的一元不等式.当然,解这些不等式对旺汪来说太简单了,所以旺喵想挑战旺汪.旺喵给出一组一元不等式,并给出一个数值 .旺汪需要回答 ...
- 第八周 yukun 20155335
- div 超出高度滚动条,超出宽度点点点
超出高度滚动条 style="width:230px; height: 180px; overflow: auto;" 超出宽度点点点 style="width: 220 ...
- 制作Solaris系统的USB启动盘
制作方法: 1. wget http://192.168.2.5/surefiler-installer/2011-12-09/devel-2011.12.9.tgz 2. cd /root tar ...
- highcharts 从后台动态改变数据
//columnChart 图表对象,创建示例就展示了. var series = this.columnChart.series; whi ...
- php伪协议
文件包含函数:include.require.include_once.require_once.highlight_file .show_source .readfile .file_get_con ...
- HighGUI图形图像界面初步——鼠标操作
OpenCV中的鼠标操作和滑动条的消息映射方式很类似,都是通过一个中介函数配合一个回调函数来实现的,创建和指定滑动条回调函数为createTrackbar, 而指定鼠标操作消息回调函数的函数为setM ...
- JS中类型检测方式
在js中的类型检测目前我所知道的是三种方式,分别有它们的应用场景: 1.typeof:主要用于检测基本类型. typeof undefined;//=> undefined typeof 'a' ...
- POJ 3308
http://poj.org/problem?id=3308 考虑答案不是乘积而是和的做法, 因为对于每一个伞兵我们要么在这行内安装大炮消灭它 要么在这列中安装大炮消灭它,所以容易看出这是一个最小边覆 ...