游戏音频的播放在任何游戏中都占据非常重要的地位,音频的播放还可以分为两种,一种为游戏音乐,另一种为游戏音效。前者适用于较长的音乐,如游戏背景音乐。第二种试用与比较短的游戏音乐,如开枪,打怪 时“砰砰”一瞬间播放的游戏音效。今天MOMO将用下面的例子带盆友们去剖析Unity3D游戏音乐与音效的播放。
Unity3D游戏引擎一共支持4个音乐格式的文件
.AIFF 适用于较短的音乐文件可用作游戏打斗音效
.WAV 适用于较短的音乐文件可用作游戏打斗音效
.MP3 适用于较长的音乐文件可用作游戏背景音乐
.OGG 适用于较长的音乐文件可用作游戏背景音乐
在场景中创建一个空的游戏对象。
GameObject -> CreateEmpty 创建成功后我命名为audio。
给audio添加一个AudioSource属性,这个属性非常的重要,Unity播放音乐主要就是要靠这个东西。
Component -> Audio – > Audio Source。
找一个音乐文件,我这里使用了一个.mp3音乐文件,我命名为0.mp3 如下图所示将它拖动到右侧Audio Clip处。
我们发现 Audio Source 有很多设置的属性,那么MOMO将一些比较重要的属性诺列出来。
AudioClip :声音片段,还可以在代码中去动态的截取音乐文件。
Mute : 是否静音
Bypass Effects: 是否打开音频特效
Play On Awake: 开机自动播放
Loop:循环播放
Volume: 声音大小,取值范围0.0 到 1.0
Pitch:播放速度,取值范围在 -3 到 3 之间 设置1 为正常播放,小于1 为减慢播放 大于1为加速播放。创建一个脚本我命名为audio.cs 用来音乐的播放。本章将实现3个按钮 点击实现 播放音乐、 停止音乐、 暂停音乐 ,与一个横向拖动条通过手指的拖动实现动态修改音乐声音。
audio.cs
using UnityEngine;
using System.Collections;
public class audio : MonoBehaviour {
//音乐文件
public AudioSource music;
//音量
public float musicVolume;
void Start() {
//设置默认音量
musicVolume = 0.5F;
}
void OnGUI() {
//播放音乐按钮
if (GUI.Button(new Rect(10, 10, 100, 50), "Play music")) {
//没有播放中
if (!music.isPlaying){
//播放音乐
music.Play();
}
}
//关闭音乐按钮
if (GUI.Button(new Rect(10, 60, 100, 50), "Stop music")) {
if (music.isPlaying){
//关闭音乐
music.Stop();
}
}
//暂停音乐
if (GUI.Button(new Rect(10, 110, 100, 50), "Pause music")) {
if (music.isPlaying){
//暂停音乐
//这里说一下音乐暂停以后
//点击播放音乐为继续播放
//而停止以后在点击播放音乐
//则为从新播放
//这就是暂停与停止的区别
music.Pause();
}
}
//创建一个横向滑动条用于动态修改音乐音量
//第一个参数 滑动条范围
//第二个参数 初始滑块位置
//第三个参数 起点
//第四个参数 终点
musicVolume = GUI.HorizontalSlider (new Rect(160, 10, 100, 50), musicVolume, 0.0F, 1.0F);
//将音量的百分比打印出来
GUI.Label(new Rect(160, 50, 300, 20), "Music Volueme is " + (int)(musicVolume * 100) + "%");
if (music.isPlaying){
//音乐播放中设置音乐音量 取值范围 0.0F到 1.0
music.volume = musicVolume;
}
}
}
将audio.cs 绑定在摄像头上,将audio游戏对象拖动赋值给Music 这个AudioSource这个对象。这里强调一下AudioListenr ,它音频监听器,用来监听音乐文件的播放。这是一个重要的属性,一定要勾选,只有勾选后才可以进行音乐的播放。
build and run 运行我们这个游戏Demo,一切功能完美实现,哇咔咔~
最后欢迎各位盆友可以和MOMO一起讨论Unity3D游戏开发,大家一起学习一起进步,哇咔咔~~~ 附上Unity3D工程的下载地址,Xcode项目我就不上传了,须要的自己导出。今天心里有点不高兴! 5555555555。就这样晚安~
下载地址:http://vdisk.weibo.com/s/abxs8
补充:
最近有朋友问我如何切换场景Unity音频不关闭,其实做法非常简单。如下图所示,你的声音组件会放在声音对象中,因为切换场景的时候声音对象会自动销毁,所以声音就会关闭。所以如果你的声音组件不被销毁掉,哪么你的声音就会连续播放了。
代码就是使用DontDestroyOnLoad()方法就可以切换场景不施放对象了。
using UnityEngine;
using System.Collections;
public class Test : MonoBehaviour
{
public GameObject audio;
void Start ()
{
DontDestroyOnLoad(audio);
}
void OnGUI()
{
if(GUILayout.Button("NEXT"))
{
Application.LoadLevel("Scene1");
}
}
}
- 本文固定链接: https://www.xuanyusong.com/archives/550
- 转载请注明: 雨松MOMO于 雨松MOMO程序研究院 发表






大神有没有研究过环绕立体声 这个有办法做么
还有你的手机找到了么- –
怎样在实现在场景1加载的音乐进入场景2之后,背景音乐可以被关闭呀
雨松大大,我用audioclip录的音,在安卓上可以播放,为啥导到xcode上就放不了了呢????????为嘛为嘛为嘛!!!!!![可怜]
雨松大大,为什么我完全按照你的操作来的,就是播放不出声音呢?我做了好久了,这个声音怎么也弄不出来!
大神 我遇到一个问题,unity导出Xcode版本之后,安卓的 iPad的声音都是正常的,但是iPhone的都特别小,音频都是2D的,非3D 会是什么原因呢。。。。跪求,急在线等!
我也遇到,后来解决了吗?
同问啊
消除类游戏连击音效怎么添加啊,搞了大半天都弄不会
如何动态播放非预定音频文件啊?
用www 来加载某个地址的mp3文件,然后设置Audio source的clip是这个clip,然后一样播放
public void Setup(string Description) {
StartCoroutine(wwwDownload(Description));
//clone prefeb
//WWW www = new WWW(“file://” + Path.Combine(Application.persistentDataPath, SceneTools.AreaNameDefault() + “//” + Description));
// Sound.clip = clip;// (AudioClip)Resources.Load(str, typeof(AudioClip));//调用Resources方法加载AudioClip资源
}
System.Collections.IEnumerator wwwDownload(string Description) {
WWW www = new WWW(“file://” + Path.Combine(Application.persistentDataPath, SceneTools.AreaNameDefault() + “//” + Description));
yield return www;
AudioClip clip = http://www.GetAudioClip();
//clip = http://www.GetAudioClip(false,false,AudioType.MPEG);
clip = http://www.GetAudioClip(false, false, AudioType.MPEG);
clip.name = Description;
GameObject prefeb_Sound = GameObject.Find(“Audio Source”);
//GameObject prefeb_Sound = (GameObject)Resources.Load(“Audio Source”, typeof(GameObject));
GameObject ob = GameObject.Instantiate(prefeb_Sound, new Vector3(0, 0, 0), Quaternion.identity);
ob.name = “file:” + Description;
//Sound = Instantiate(Sound);
ob.GetComponent().clip = clip;
Sound = ob.GetComponent();
}
qq 243269910
自己做的一个例子,总是没点播放就有音乐播放。请问是什么原因啊?
play on awake 的对勾去掉
从A 切换到B场景时,音乐正常,从B在切换回A时,就会有警告了,说有两个声音组件了。因为之前从A到B时的组件没有释放,所以从B到A时又重新生成了另外一个。。。。
同有这个问题啊 雨松前辈可以帮忙解决下么?
这个问题雨凇已经说过了的,你找下他其他的博文,里面就有关于DontDestroyOnLoad()的处理
雨松前辈您好,可以请问一下,像在有些游戏中,一段音乐前奏播放完后,之后会从中后段的部份就一直循环,这个有机会能在Unity中实现吗?
大神,求助如何通过脚本读取外部文件夹的音频文件
我现在要实现的是这样啊,我要从服务端down一个 MP3的 文件过来播放,请问这个行得通么???!!!
全局音乐(跨场景)该如何管理,比如音量大小
声音太小,请问为什么呢,前辈?
大大,我想问下,怎么样去关闭所有的NGUI Button的声音呢?
用代码 动态隐藏哪个组件就可以。。。 或者直接勾掉它。。
unity,音乐能预览播放,但是运行的时候播放不了为什么啊 会不会和机器本身安装的解码器有关
pro版本?
Unity3D 切换场景后 背景音乐 如何连续播放
如果多场景转换,那么一个音频怎么能做到被多场景共享呢???就是场景转换可是音乐播放继续怎么实现呢???希望雨松老师指点下~~~谢啦~~
没做过这个喔
偶像。。。
請問大大,我按照你的作法都做了 可是再丟程式到”将audio.cs 绑定在摄像头上” 這一段
他會出現you need to fix all compile errors in all scrips first 請問是什麼原因呢:(
你的脚本出现错误了? 检查一下脚本。