U3D游戏开发框架(四)——音频管理器
一:目的
游戏音频的播放在任何游戏中都占据非常重要的地位,音频的播放可以分为两种,一种为游戏音乐,另一种为游戏音效。前者适用于较长的音乐,如游戏背景音乐。第二种适用于比较短的游戏音乐,如开枪瞬间的音效
在Unity中有两个关于音频的重要组件:AudioListener和AudioSource,通过AudioListener进行监听,AudioSource进行播放
所以我们需要一个管理器统一管理音频的相关操作
二:解决的问题及优点
——音效的播放、暂停、继续、静音
——背景音乐的播放、暂停、继续、静音、渐隐
三:使用方法
——将所有音频文件统一放在Resources文件夹下的Sounds文件夹下
——使用SoundMgr.Ins.XXX
SoundMgr.Ins.PlayBGM("bgm");
SoundMgr.Ins.PlaySound("coin");
SoundMgr.Ins.StopPlay();
SoundMgr.Ins.PausePlay();
SoundMgr.Ins.BGMFade(2);
四:代码实现
using UnityEngine;/// <summary>
/// 音频管理器
/// </summary>
public class SoundMgr : MonoSingleton<SoundMgr>
{public const string SoundDir = "Sounds/";//音频目录//BGM播放器private AudioSource bgmPlayer;public AudioSource BgmPlayer { get { return bgmPlayer; } }//音效播放器private AudioSource soundPlayer;public AudioSource SoundPlayer { get { return soundPlayer; } }//是否全局静音public bool IsGlobalMute { get { return bgmPlayer.mute && soundPlayer.mute; } }public override void Awake(){base.Awake();if (bgmPlayer == null){bgmPlayer = gameObject.AddComponent<AudioSource>();bgmPlayer.loop = true;bgmPlayer.playOnAwake = false;bgmPlayer.mute = false;}if (soundPlayer == null){soundPlayer = gameObject.AddComponent<AudioSource>();soundPlayer.loop = false;soundPlayer.playOnAwake = false;soundPlayer.mute = false;}}#region Interface/// <summary>/// 播放音效/// </summary>public void PlaySound(string soundName, float volume = 1, bool loop = false){AudioClip clip = Resources.Load<AudioClip>(SoundDir + soundName);if (clip == null){Debug.LogError("没有此音频:" + soundName);return;}soundPlayer.clip = clip;soundPlayer.volume = volume;soundPlayer.loop = loop;soundPlayer.Play();}/// <summary>/// 播放背景音乐/// </summary>public void PlayBGM(string bgmName, float volume = 1, bool loop = true){AudioClip clip = Resources.Load<AudioClip>(SoundDir + bgmName);if (clip == null){Debug.LogError("没有此音频:" + bgmName);return;}bgmPlayer.clip = clip;bgmPlayer.volume = volume;bgmPlayer.loop = loop;bgmPlayer.Play();}/// <summary>/// 背景音乐渐隐/// </summary>public void FadeBGM(float fadeDuration){bgmFade = true;bgmFadeBeginTime = Time.realtimeSinceStartup;bgmFadeBeginVolume = bgmPlayer.volume;bgmFadeDuration = fadeDuration;}/// <summary>/// 暂停播放/// </summary>public void PausePlay(){bgmPlayer.Pause();soundPlayer.Pause();}/// <summary>/// 继续播放/// </summary>public void ResumePlay(){bgmPlayer.Play();soundPlayer.Play();}/// <summary>/// 停止播放/// </summary>public void StopPlay(){bgmPlayer.Stop();soundPlayer.Stop();}/// <summary>/// 设置静音状态/// </summary>public void SetMuteState(bool b){bgmPlayer.mute = b;soundPlayer.mute = b;}/// <summary>/// 设置BGM静音状态/// </summary>public void SetBgmMuteState(bool b){bgmPlayer.mute = b;}/// <summary>/// 设置Sound静音状态/// </summary>public void SetSoundMuteState(bool b){soundPlayer.mute = b;}/// <summary>/// 停止播放BGM/// </summary>public void StopPlayBGM(){bgmPlayer.Stop();}/// <summary>/// 暂停播放BGM/// </summary>public void PausePlayBGM(){bgmPlayer.Pause();}/// <summary>/// 继续播放BGM/// </summary>public void ResumePlayBGM(){bgmPlayer.Play();}/// <summary>/// 停止播放音效/// </summary>public void StopPlaySound(){soundPlayer.Stop();}#endregion#region Toolsprivate bool bgmFade;//背景音乐是否渐隐private float bgmFadeBeginVolume;//背景音乐渐隐开始时的音量private float bgmFadeBeginTime;//背景音乐渐隐开始的时间private float bgmFadeDuration;//背景音乐渐隐的时间private void Update(){if (bgmFade){float delta = Time.realtimeSinceStartup - bgmFadeBeginTime;if (delta <= bgmFadeDuration){bgmPlayer.volume = Mathf.Lerp(bgmFadeBeginVolume, 0, delta / bgmFadeDuration);}else{bgmFade = false;bgmPlayer.volume = 0;}}}#endregion
}
U3D游戏开发框架(四)——音频管理器相关推荐
- H5 微信小游戏 —— 音频管理器
前言 原本使用的是 egret 的 egret.SoundChannel 和 egret.Sound 来管理音频,但不知为何在重复将游戏切换到前后台后,很容易出现背景音播放不全.播放重复和无法播放的问 ...
- win7系统怎样打开音频服务器,win7系统打开音频管理器的具体教程
win7系统使用久了,好多网友反馈说win7系统打开音频管理器的问题,非常不方便.有什么办法可以永久解决win7系统打开音频管理器的问题,面对win7系统打开音频管理器的图文步骤非常简单,只需要1.点 ...
- Android之AudioManager(音频管理器)详解
AudioManager简介: AudioManager类提供了访问音量和振铃器mode控制.使用Context.getSystemService(Context.AUDIO_SERVICE)来得到这 ...
- [翻译] SoundManager 音频管理器
SoundManager 音频管理器 https://github.com/nicklockwood/SoundManager Purpose SoundManager is a simple cla ...
- WIN10插入耳机没声音,Realtek音频管理器打不开
装完显卡之后电脑突然就没声音了,百度了好多方法也没解决,其中打开 Realtek音频管理器 的方法是比较靠谱的,C:\Program Files\Realtek\Audio\HDA,在这个目录下打开 ...
- 耳机插入电脑没反应 控制面板也找不到realtek音频管理器的解决方案
运行框(win+R)输入msconfig,回车 将[立体音频组合器服务]前面的这个[√]去掉下,确定,可能需要重启计算机.我的是有提醒重启计算机.控制面板还是看不到找不到realtek音频管理器,但耳 ...
- unity全局总的音频管理器
这篇博客介绍一个unity的总的音频管理器 可以有效避免音频错乱的问题 我们把它挂在场景中 可以使用跨场景保存的方法来实现场景跳转之后的存在 首先 这篇博客会用到我之前介绍的知识 我下面把链接先给大家 ...
- win10系统,主机箱的前置耳麦插孔用不了,“设置——声音”麦克风或者耳机已拔出未修复,“输入设备”无插座信息,更新驱动也无效,控制面板——小图标里查不到realtek高清晰音频管理器——一招解决
win10系统,有一天忽然固态硬盘坏了,拆了重装系统之后主机箱的前置耳麦插孔里,插了耳机只能听到声音,麦克风无效,微信语音电话打不出去了. 查了一圈,"设置--声音"显示:麦克风或 ...
- Android音频管理器AudioManager用法
当我们在听歌时,当我们在刷小视频时,当我们在看动漫.在看电影.在追剧时,不知道是否有人注意到,在这些软件中滑动屏幕或者拖动滑动条就可以直接控制音量,而不需要去按手机硬件上的音量键. 在某些时候,程序需 ...
最新文章
- 考察新人的两道c语言题目
- 登录界面的滑动_电脑同时登录两个微信,原来这么简单?3步搞定!
- linux系统不关机添加硬盘吗,CentOS中不重启添加硬盘
- python列表删除指定字典_Python:从列表中删除字典
- linux平台下 延迟工作队列实例
- js学习(4) 函数
- CentOS 5.4 下配置FTP服务器 [转帖]
- CSharpGL(36)通用的非托管数组排序方法
- UtilSession failed: Prerequisite check CheckSystemSpace space(22288172004) is not availa
- mysql数据库属性_mysql - 数据库操作和数据属性
- 基础算法学习(二)_二叉树及应用赫夫曼编码
- Hadoop MapReduce执行过程(一)
- Java 算法 判定字符位置
- restTemplate请求,报 : No instances avaliable for ip地址
- C++入门系列博客二 C++ 控制流
- 蚁群算法原理及matlab代码实现
- 小米 OJ 编程比赛 02 月常规赛 (Carryon 数数字)
- matlab做南丁格尔玫瑰图,用VBA做个南丁格尔玫瑰图模板!
- react 中子路由(route)或二级路由如何配置?
- 天作之合:水果与朗姆酒
热门文章
- MySQL结课体会,听课心得体会小结
- [Python]调用百度API进行自然语言处理 标签、关键字 以及 词法分析
- 如何解决Error running ‘Tomcat 8.5.45‘: port out of range:-1
- 解决办法在idea中搭建spark环境:Unable to fetch table student. Invalid method name: ‘get_table_req‘;
- JavaEE实现微博项目(含注册、登录、发表微博、评论微博、关注博主、阅读排行榜、评论排行榜等功能)
- 最长对称子串 作者 陈越单位 浙江大学
- yacclex-Chapter1
- Cortex-M MMU内存管理单元和 Linux
- 关于评审--从思想到落地
- RMAN 下CROSSCHECK命令 详解