对于Unity3D的音乐音效这块一直没有好好的看过,现在准备好好的研究一下,并作为一个笔记记录下。

支持格式

在游戏中,一般存在两种音乐,一种是时间较长的背景音乐,一种是时间较短的音效(比如按钮点击,开枪音效等)。

Unity3D支持下面几种音乐格式:

  • AIFF:适用于较短的音乐文件可用作游戏打斗音效
  • WAV:适用于较短的音乐文件可用作游戏打斗音效
  • MP3:适用于较长的音乐文件可用作游戏背景音乐
  • OGG:适用于较长的音乐文件可用作游戏背景音乐

音乐组件

Unity3D中对音乐进行了封装,总体来说,要播放音乐需要3个基本的组件,下面我们来看看这3个组件。

AudioListener

一般我们创建场景时在主Camera上就会带有这个组件,该组件只有一个功能,就是监听当前场景下的所有音效的播放并将这些音效输出,如果没有这个组件,则不会发出任何的声音。好消息是,我们不需要创建多个该组件,一般场景中只需要在任意的GameObject上添加一个该组件就可以了,但是要保证这个GameObject不被销毁,所以一般按照Unity的做法,在主摄像机中添加即可。

AudioSource

控制一个指定音乐播放的组件,可以通过属性设置来控制音乐的一些效果,可以查看官方的文档:http://docs.unity3d.com/Manual/class-AudioSource.html。

下面列出一些常用的属性:

  • AudioClip:声音片段,还可以在代码中去动态的截取音乐文件。
  • Mute:是否静音。
  • Bypass Effects:是否打开音频特效。
  • Play On Awake:开机自动播放。
  • Loop:循环播放。
  • Volume:声音大小,取值范围0.0 到 1.0。
  • Pitch:播放速度,取值范围在 -3 到 3 之间 设置1 为正常播放,小于1 为减慢播放 大于1为加速播放。

AudioClip

当我们把一个音乐导入到Unity3D中,这个音乐文件就会变成一个AudioClip对象,即我们可以直接将其拖拽到AudioSource的AudioClip属性中,也可以通过Resources或AssetBundle进行加载,加载出来的对象类型就是AudioClip。

看例子

播放音乐的简单例子

这个例子我们直接通过简单的拖拽的点击不写一行代码实现音乐的播放。

新建一个场景,给Main Camera添加一个Audio Source组件,并将我们的音乐文件拖拽到Audio Clip属性上,勾选Loop使其可以进行循环播放。

运行程序就可以听到声音了。

3D音效效果

Unity为啥要把音乐播放拆分成这3个组件呢?当然是有原因的,个人认为其中最重要的就是实现3D音效效果。

如果我们将Audio Listener看作一双耳朵的话就可以很好的理解什么是3D音效效果了,Unity会根据Audio Listener对象所在的GameObject和Audio Source所在的GameObject判断一下距离和位置来模拟真实世界中的音量近大远小的效果。

首先,找到我们导入的音乐文件,必须设置为3D音乐,默认就是。当然如果是2D的音乐就不会有近大远小的效果了。

我们新建一个场景,添加3个GameObject,给第一个添加一个Audio Listener组件,其它两个添加Audio Source组件并赋予两个音乐文件。

移除Main Camera上的Audio Listener组件,按照下面的位置摆放一下这3个组件。

运行游戏,返回Scene视窗,拖拽Audio Listener组件的位置,就可以感受到好比在两个音响之间移动的效果了。

(对于每个Audio Source声音可传递的距离可以通过拖拽其球形的线条进行调整。)

Resources加载

这里我们看看通过代码如何实现音乐的控制和播放。

我们把我们的音乐文件放到Resources文件夹中,新建一个场景和一个GameObject,并将下面的脚本添加到这个GameObject上即可:

 1 using UnityEngine;
 2
 3 public class ResourcesDemo : MonoBehaviour
 4 {
 5     private AudioSource _audioSource;
 6
 7     void Start()
 8     {
 9         //添加 Audio Source 组件
10         _audioSource = this.gameObject.AddComponent<AudioSource>();
11
12         //加载 Audio Clip 对象
13         AudioClip audioClip = Resources.Load<AudioClip>("bgm");
14
15         //播放
16         _audioSource.loop = true;
17         _audioSource.clip = audioClip;
18         _audioSource.Play();
19     }
20 }

运行就可以听到声音了。

AssetBundle加载

音乐在AssetBundle中又该如何控制和播放呢?

首先我们需要通过脚本对文件进行打包。

 1 using UnityEditor;
 2 using UnityEngine;
 3
 4 public class AssetBundleCreator
 5 {
 6     [MenuItem("Demo/CreateAssetBundle")]
 7     private static void CreateAssetBundle()
 8     {
 9         BuildPipeline.BuildAssetBundle(null, new []
10             {
11                 AssetDatabase.LoadMainAssetAtPath("Assets/Audio/bgm.ogg"),
12                 AssetDatabase.LoadMainAssetAtPath("Assets/Audio/sound.ogg")
13             },
14             Application.streamingAssetsPath + "/Audio.assetbundle",
15             BuildAssetBundleOptions.CollectDependencies | BuildAssetBundleOptions.CompleteAssets | BuildAssetBundleOptions.UncompressedAssetBundle,
16             BuildTarget.StandaloneWindows64);
17     }
18 }

接下来新建一个场景和一个GameObject,并将下面的脚本添加到这个GameObject上即可:

 1 using UnityEngine;
 2
 3 public class AssetBundleDemo : MonoBehaviour
 4 {
 5     private AudioSource _audioSource;
 6
 7     void Start()
 8     {
 9         AssetBundle assetBundle = AssetBundle.CreateFromFile(Application.streamingAssetsPath + "/Audio.assetbundle");
10
11         //添加 Audio Source 组件
12         _audioSource = this.gameObject.AddComponent<AudioSource>();
13
14         //加载 Audio Clip 对象
15         AudioClip audioClip = assetBundle.Load("sound", typeof(AudioClip)) as AudioClip;
16
17         //播放
18         _audioSource.loop = true;
19         _audioSource.clip = audioClip;
20         _audioSource.Play();
21     }
22 }

Play和PlayOneShot的区别

AudioSource播放声音提供了两种方法,分别如下:

public void Play(ulong delay = 0);

public void PlayOneShot(AudioClip clip, float volumeScale = 1.0F);

那么这两个方法有啥区别呢,或者说在什么样的情况下应该使用哪个方法呢?

我们先看看Play方法,该方法可以和其它方法配合使用,比如Pause(暂停)和Stop(停止),播放的是clip属性对应的Audio Clip对象,同一时刻只会有一个clip音乐进行播放。如果要同时使用Play方法播放两个音乐就需要再添加一个Audio Source对象了。

而PlayOneShot是指马上播放一个音乐且只播放一次,同时Pause和Stop对其无效,如果我们调用该方法播放多次音乐,则多个音乐会同时被播放出来。

使用场景

Play方法适合播放背景音乐,因为背景音乐同一时刻只会有一个再播放,而且还需要可以控制其播放和暂停等。

PlayOneShot方法适合播放音效,因为音效一般只会播放一次且不需要其它的控制,同时多个音效播放时是可以共存的,即可以听到多个声音。

源文件下载

http://pan.baidu.com/s/1eQCW7AE

Unity3D音乐音效学习笔记相关推荐

  1. Unity3D音乐音效学习

    对于Unity3D的音乐音效这块一直没有好好的看过,现在准备好好的研究一下,并作为一个笔记记录下. 支持格式 在游戏中,一般存在两种音乐,一种是时间较长的背景音乐,一种是时间较短的音效(比如按钮点击, ...

  2. 【Unity3D游戏开发学习笔记】(六)上帝之手—GameObject的操作

    在Unity中,所有实体都属于游戏对象(GameObject),比如外部导入到场景中的模型,Unity自带的立方体等等,而要将这些GameOject进行管理,交互等操作,则需要用到脚本来实现,上一节我 ...

  3. Unity3d之HashSlash学习笔记之(二)--角色基础类的构建

    Hash&Slash学习笔记之(二)--角色基础类的构建 BaseStat类的构建 基本成员变量: _baseValue //基础属性值 _buffValue //增加的buff值 _expT ...

  4. Unity3d开发——保卫萝卜学习笔记一地图编辑器开发

    一直在学习,几乎边学边忘,再也不想打王者农药了,现在打卡学习持续写博客,现在在开发学习保卫萝卜,这篇文章关于地图编辑器的开发,在项目中不能是无限个场景,用读取xml文件的方法可以说是能实现无限关卡,同 ...

  5. Unity3D之移植学习笔记:移植到Android平台

    首先,我们需要一台已经配置好可以开发Android应用的计算机,这里我使用的是Windows系统+Eclipse+ADT的开发环境,当然也可以使用Android Studio或者使用Mac系统都可以. ...

  6. Unity3D基础知识学习笔记

    1.基础知识: 标题栏 菜单栏 工具栏:变换工具.gizmos切换.播放控件.层列表.布局列表 功能窗口 2.资源及资源类型:在project里面能够create的资源.project面板可以对资源进 ...

  7. 【Unity3D游戏开发学习笔记】(七)上帝之眼—第三人称摄像机的简单实现(跟随视角,自由视角)

    陆陆续续又开始更新自己的博客,看来自我驱动能力还是不够啊= =,废话不多说了,之前的内容大概说了一下Unity的一些基础知识,接下来我们将要对一些基本功能做一些学习.大家都知道,一个游戏,少不了摄像机 ...

  8. 水果音乐软件学习笔记

    按住左键我可以任意移动 按住右键可以取消 右边可以任意拖拽 下方为力度窗口 ctrl按键可以框选部分,就可以进行相关移动 吸附精度 越往下面选择,越粗糙 切片工具 往下拉,可以将音乐切割 单个选择用c ...

  9. 【Unity3D游戏开发学习笔记】(一)Unity3D初认识

    一.什么是Unity3D Unity是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏.建筑可视化.实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合 ...

最新文章

  1. Angular - - ngReadonly、ngSelected、ngDisabled
  2. linux下的jsp
  3. [转]Javascript 闭包
  4. 电脑开机3秒就重启循环_3秒开机不是梦,泰捷WE40旗舰升级版体验
  5. 全国人工智能大赛 AI+4K HDR赛项 冠军团队方案分享
  6. SAP BTP Kyma Runtime dashboard 打开报缺少缺陷的错误消息该如何解决
  7. Module build failed: Error: Missing binding
  8. 定时备份 MySQL 并上传到七牛
  9. 彩色BMP转换成灰度图的原理
  10. MySql数据库连接种类
  11. 操作系统(2)应用眼中的操作系统:系统调用
  12. CMD attrib命令详解
  13. 人工智能ai算法_当AI算法脱轨时
  14. win32 粒子编辑器
  15. 2021年中国货车行业发展现状分析,新能源货车将迎来快速发展「图」
  16. 英语发音规则之26个字母发音规则(A字母)
  17. Springboot整合支付宝支付(沙箱)
  18. 移植u-boot-1.3.4到GT2440(第二版2.0)
  19. 长短期记忆(LSTM)
  20. 手机销售系统(Java源码)

热门文章

  1. python 命令行参数 parser.add_arguement 中各参数的意思
  2. 每日好课分享【精品课程】 每日好课分享
  3. C语言中的conio头文件,C中的conio.h头文件在VC++中是什么?
  4. 20230220华南金牌主板u盘启动
  5. Python提取pdf中的表格数据(附实战案例)
  6. CPU主频,倍频,外频,前端总线
  7. 最新|移动机器人导航定位技术概述
  8. acunetix wvs网站漏洞扫描 XSS CSOR处理
  9. WVS最新版\Acunetix Web Vulnerability Scanner 12.0
  10. FMETP Steam v2 使用方法(一)