这章练习将介绍在unity中创建 audio(音频)的工具,培养的技能将帮助创建引人入胜的音频音景。完成本次学习后,能够使用 Unity 中的所有主要音频组件,为各种不同体验创建音频效果。
音频处理工具:
Audacity (https://www.audacityteam.org/):一款开源音频应用程序,可让您录制和编辑音频效果。它对于对现有声音进行细微编辑特别有用。
Beepbox (https://www.beepbox.co):一款用于创作乐器旋律的免费在线工具。
Unity中音频的工作方法
Unity 中的音频都是关于两个组件之间的交互:音频监听器(audio listener)和音频源(audio source)。
音频监听器在交互式体验中充当用户的耳朵。监听器是被动组件,会自动包含在摄像头中。监听器与摄像头相关联,因为摄像头在交互式体验中代表用户的眼睛,将用户的耳朵与摄像头配对是有意义的。只要音频监听器进入音频源的范围,音频源就会播放指定的音频片段。一个场景中只能有一个音频监听器,因此额外的摄像头需要移除它们的监听器。
音频源是场景视图中保存音频文件的组件。它们定义声音的可听范围以及音频侦听器如何感知声音。场景中允许的音频源数量没有限制,因此每个需要发出声音的对象都可以有一个。
Unity 能够处理以下音频格式:MPEG(由运动图像专家组开发);Ogg Vorbis - 开源通用音频; WAV(波形音频文件)-由微软和 IBM 开发; AIFF(音频交换文件格式)- 由 Apple 开发。
创建动态音效
通过为玩家角色添加脚步声效果来开始创建复杂音景的过程:
- 选择基于时间或基于动作的方法,例如触发器或事件来播放音频片段。
- 解释音频在营造氛围中的作用。
玩家脚步声
1. 下载附件,解压后在unity hub中打开该项目文件 creativecore_audio_2022;
2. 在unity中打开项目文件后,在Project窗口中 Assets>CreativeCore_Audio>Scenes,打开 Audio_Outdoor_Scene 场景文件;
3. 打开后,运行游戏,在游戏窗口中使用 WASD 按键,在场景中漫游,但没有听到任何脚步声;
添加走路的声音事件
4. 导航至 Animator Controller 的 Animations 文件夹:Assets> CreativeCore_Audio > StarterAssets > ThirdPersonController >Character> TutorialAnimations, 选择 Locomotion--Walk_N动画;
5. 在右边 Inspector 窗口中,选择 Animation 选项卡,然后展开下面的 Events 属性,并将最底部的Walk_N动画预览窗口恢复
Events 属性部分包含一个小的时间轴和可以发送的不同类型数据的列表,但直到您添加第一个事件之前,这些数据仍将保持灰色且不可用
预览Walk_N动画,看到在 Frame 9 (即第9帧)时左脚落地
6. 在Events 属性,点击最左侧 Add Event 按钮,这是 function 右边的编辑窗口激活,自动填充"NewEvent"名称,改名字为 “PlayStep”,本教程后面的脚本中会引用此参数,因此请务必按此处所示准确拼写和大小写。
7. 继续预览Walk_N动画,看到在Frame 24 (即第24帧)时右脚落地,然后在Events 属性,再次点击最左侧 Add Event 按钮,保持PlayStep名字不变,然后点击 Apply 按键,将两个Events 保存到动画中。
添加跑步的声音事件
8. 在文件夹:Assets> CreativeCore_Audio > StarterAssets > ThirdPersonController >Character> TutorialAnimations, 选择 Locomotion--Run_N动画,开始设置跑步的动画 Events;
9. 重复上面第 5 步,选择 Animation 选项卡,再选择窗口中Events 属性,在下方Run_N动画预览窗口中,拖动动画播放线,大概在Frame 6 (第6帧)时,跑步的左脚着地,这时点击Events 属性下最左侧 Add Event 按钮,添加 “PlayStep” 事件;
10. 再次回到下方动画预览窗口,继续拖动动画播放线,大概在Frame 17 (第17帧)时,跑步的右脚着地,这时点击Events 属性下最左侧 Add Event 按钮,添加 “PlayStep” 事件,然后点击下方的 “Apply” 按键,将两个 PlayStep时间添加到动画。
添加跳跃的声音事件
11. 在文件夹:Assets> CreativeCore_Audio > StarterAssets > ThirdPersonController >Character> TutorialAnimations, 选择 Jump--Jump 动画,开始设置跳跃的动画 Events;
12. 注意该Jump动画包含两段:JumpStart和JumpLand,选择JumpLand动画来设置;
13. 仿照上述步骤 9 和 10, 找到跳跃动画中脚落地的帧,再在Events属性中添加 “PlayStep”事件,跳跃是双脚着地,只有 1 个事件。
添加脚步控制脚本
14. 在文件夹:Assets> CreativeCore_Audio >Scripts 中选择 FootstepManager 脚本,将该脚本拖到 Hirarchy窗口中 PlayerArmature 游戏物件上,在选择 PlayerArmature 后,该FootstepManager 脚本会在右方的Inspector窗口下方显示
15. 在 FootstepManager脚本下方,点击 Add Component 按键,选择 Audio Source 加入到 PlayerArmature 的属性
16. 点击同一个窗口中 FootstepManager脚本, 可以看到下方有三个类别脚步, Grass Steps, Water Steps, Cave Steps,分别对应在3种地面上的脚步声音。
设置地面Tag
17. 在左方的Scene 场景中选择Grass,然后在右方Inspector 窗口中,点击Tag 边的下拉菜单,可以看到Grass tag,选择该 Tag,标志该游戏物件为Grass;
18. 同样操作,分别选择Scene场景中的 Water 和 Cave,再在Inspector 窗口中分别设置 Water 和 Cave 的tag。
添加声音列表
19. 点击 Hierarchy窗口中 PlayerAmature 游戏物件,然后在选择 Project 窗口中 Assets> CreativeCore_Audio >Audio 打开该文件夹,可以看到声音文件;
20. 在右侧 Inspector窗口中,打开Footstep Manager(script)属性,再在上面Audio文件夹中选择Grass,water, cave中各一个声音文件,添加到右侧Grass Steps, Water Steps, Cave Steps中,如下图所示
hint:拖拽1个声音文件,例如grassstep1,将该文件拖到 Grass Steps的文字上,这个声音文件会自动加到下面的列表中
21. 添加完上述3个文件后,可以点击 Play 按键测试游戏,在游戏窗口中,按 WASD 按键控制漫游,空格键激发跳跃动作,走路的时候可以听到对应的脚步声,在不同地面(例如Grass和 Water)上有不同的声音.
hint. 如果觉得声音比较单调,可以将Audio文件夹中的声音文件都添加到 Footstep Manager 脚本中,如下图所示,这样声音会稍有变化。
创建3D声音效果
声音的大小和品质是随着距离大小而改变的,例如远处听到的声音小,近处听到的声音大。声音的传播也是3D的,从耳朵外不同角度传来的声音,感觉的效果也不一样。
这节练习将设置场景中的水流瀑布声音,尤其是设置声音传导的规律和速度,让你有身临其境的感受。
添加水流声音
22. 在Hirarchy窗口中,点击鼠标右键,在弹出的菜单中选择 Audio > Audio Source, 将名字改为 Waterfall Audio;
23. 在左侧Scene窗口中,将刚才添加的Audio Source移动到水流瀑布的底端(与水池接触的地方);
24. 在Project 窗口中,选择Assets>CreativeCore_Audio>Audio 文件夹,选中第一个声音文件,拖拽到右侧Inspector窗口中 Audio Source属性下的AudioClip右边的编辑框中,添加该声音文件到该Audio Source,同时将下方 Loop边的编辑框勾选,使得声音文件能够重复播放,最终设置如下图所示:
25. 点击窗口中正中间上方的 Play 按键,运行游戏后,就可以听到水流瀑布的声音了。但是这个声音缺少3D效果,走到瀑布近处的时候,声音声量没有任何变化,像个背景水流噪声。
退出游戏,下面开始设置声音的3D效果。
26. 将Audio Source属性下Spatial Blend 参数设置的滑杆移动到最右端,即3D,然后在下方3D Sound Settings中将Min Distance 值 2, Max Distance 值 20,可以看到最下端的曲线图框变化,日下图所示:
27. 再次运行游行,一开始可能没有听到水流瀑布声音,操作玩家导航到水流瀑布的地方,可以感受到水流瀑布声音逐渐变大。可以在游戏运行的时候,更改Max Distance 值为 40,在操纵玩家,可以发现在更远处可以听到声音了。
28. 可以尝试更改不同的 Min Distance 和 Max Distance 的值,感受一下声音大小随距离变化。尝试后,退出游戏。
声音传播衰减方式设置
Unity 提供了三种声音传播衰减的方式 Logarithmic Rolloff, Linear Rolloff, Custom Rolloff, 选择其中一种衰减方式,下方图框中就有不同形状的红线,显示声音音量随距离衰减的不同形式。
Logarithmic Rolloff
Logarithmic Rolloff,声音衰减设置一般用于环境声音。
29. 设置 Colume Rolloff 的下拉列表,选择 Logarithmic Rolloff, 设置 Max Distance 值为500,可以看到如下红线图像,显示音量在短距离就衰减的很快。再次运行游戏,感受一下水流声音大小随距离瀑布位置的变化
30. 将Max Distance值改为20,可以看到上述红色曲线衰减不是那么快了,竖着的红线表示Audio Listenser的位置,当玩家里瀑布距离越近时,图中竖着的红线接近曲线的最高点时,声音音量逐渐变大,在到达最高点时音量最大;当玩家里瀑布距离越远时, 图中竖着的红线逐渐向右,过了水平蓝线与曲线的交点后,声音就听不到了。
31. 设置不同的Min Distance 和 Max Distance 的值,在操纵玩家在场景中导航,感受瀑布水流声音的变化。最后退出游戏。
Linear Rolloff
Linear Rolloff,声音衰减设置一般用于引起玩家需要注意的声音,因为声音音量与距离的线性变化。
32. 设置 Colume Rolloff 的下拉列表,选择 Linear Rolloff, 可以看到如下红色线性曲线。
33. 点击Play按键,运行游戏后,可以发现水流瀑布声音变化随着玩家距离变化会比原先显著。
34. 尝试设置不同的Min Distance 和 Max Distance 的值,在操纵玩家在场景中导航,感受瀑布水流声音的变化。最后退出游戏。
Custom Rolloff
用户定制声音衰减设置给与设置用户想要听到的声音变化。
35. 设置 Colume Rolloff 的下拉列表,选择 Custom Rolloff, 可以看到红色线性曲线上有一些可以拖拽的点。可以通过拖拽这些点的位置,改变曲线的形状;拖拽这些点高亮后出现的横线方向,可以改变该点曲线的正切值。
36. 也可以选择上述红色曲线时点击鼠标右键,弹出 “Add Key”,添加关键点,给予更多的变化。
37. 运行游戏,自由更改上述红色曲线形状,感受声音随玩家距离的变化。最后退出游戏。
更改Audio Listener位置
在上述听流水瀑布的时候,会发现声音和玩家的位置有点不匹配(例如,玩家到瀑布时所听到的声音没有达到最大声,在穿过瀑布后,声音才达到最大)。这是因为audio listener放在主摄像头(main camera),不是放在玩家身上。由于main camera 始终在玩家的后上方(即第三视角),与玩家之间有一定距离,因此造成声音延迟。
38. 在Hierarchy窗口中选择 MainCamera,在右侧Inspector中找到Audio Listener属性,点击其右侧的三点按钮,在弹出菜单中选择“Remove Component";
39. 在 Hierarchy 窗口中选择 PlayerAmature,在右侧 Inspector 窗口的最下方,点击"Add Component"按键,添加 Audio Listener.
40. 点击play按键,运行游戏,这时可以查看一下声音是否有延迟,最后退出游戏。
创建混响(Reverb)声音
混响区(Reverb Zones) 获取音频剪辑并根据音频监听器在混响区内的位置使音频剪辑失真。从没有环境效果的点逐渐到有环境效果的点(例如进入洞穴时),便可使用混响区.
下面的练习将设置瀑布后的洞穴的混响设置。下图显示了一个声音混响的示意图,声音在墙壁的回声和生源的声音混在一起。
参考:混响区 - Unity 手册
Audio Reverb Zone
41. 在Hierarchy 窗口中,点击鼠标右键,在菜单中选择 Audio> Audio Reverb Zone, 添加的reverb zone命名为"Cave Reverb";
42. 将这个新建的 Cave Reverb 移到瀑布后面的洞穴中心,设置其 MinDistance 和 MaxDistance值,使得内圈尽量包含洞穴内壁,外圈包含洞穴外部(重点时覆盖洞穴的入口部分外缘),如下图所示:
43. 继续在Inspector窗口中,设置Audio Reverb Zone中 ReverbPreset 边的下拉列表中选择 ”Cave“;
44. 点击play按键开始游戏,导航玩家到瀑布,听到流水声音变化,穿过瀑布到洞穴后,走路声音在洞穴中有回声。为测试回声效果,可以将 Cave Reverb 关闭,听一下声音效果,然后再将 Cave Reverb 激活,比较两种情况下再洞穴中的声音效果 (大家的音箱要高级一点,听到的声音效果更明显:) )。
45. 测试其他的混响效果,在ReverbPreset 边的下拉列表中选择 ”Padded Cell“, 听一下走路的声音;再从下拉列表中选择 ”Stone Corridor“, 然后再听一下走路的声音,比较一下声音有什么不同。
46. 尝试其他选项, 尝试完了之后,退出游戏。
洞穴内水滴声音
47. 在Hierarchy窗口中点击鼠标右键,添加Audio>Audio Source, 命名为 ”Cave Water Drops“,将这个audio source拖放到洞穴内部;
48. 将Assets>CreattiveCore_Audio>Audio文件夹中的 WaterDroplets 拖放到上述 Cave Water Drops 的AudioClip的编辑框中,设置了声音源文件;
49. 激活Loop,设置Priority 的值为100 (默认值时128, 值越小,重要性越高),设置Spatial Blend 为3D;
50. Volume Rolloff下拉列表中选择" Linear Rolloff", 设置 Min Distance and Max Distance 的值覆盖洞穴的内部空间;
参数设置如图所示:
50. 运行游戏,将玩家导航到洞穴中,可以听到洞穴内水滴的声音。可以尝试将水流瀑布的声音关闭一下,这样脚步声和水滴声就比较显著了。测试完后,退出游戏。
混音器(Audio Mixer)
Unity 混音器 (Audio Mixer) 允许混合各种音频源,对音频源应用效果,以及执行母带制作 (mastering)。混音器组本质上是音频的混合,即一个允许您应用音量衰减和音高校正的信号链;混音器组允许您插入用于处理音频信号的效果,并允许更改效果参数。此外还有在母线之间传递结果的发送和返回机制。
参考:混音器 - Unity 手册
51. 打开混音器界面,选择顶部菜单 Window > Audio > Audio Mixer, 在界面上选择 + 按键新建一个混音器,命名为“Master”,其将包含所有包含在场景中的音频。(可以将混音器窗口跟Scene窗口并列)
52. 在上述界面 Groups 部分,选择 + 新建一个新组,命名为“Water”,准备包含场景中的水流瀑布声音和洞穴内的水滴声音。
53. 在Hierarchy窗口中选择 Waterfall Audio,再在右边Inspector窗口中,Audio Source部分的 Output 属性,点击其右边的 选择按键,在弹出窗口中双击 Water,将 Waterfall 音频加入到混音器中。
54. 运行游戏,操纵玩家到洞穴中,可以听到水滴和瀑布声音。这是点击Audio Mixer界面中的 Edit in Play Mode,可以定制water混音,例如改变声音大小,也可以在右边Inspector窗口的下方,点击 Add Effect,添加其他的混音参数,如下图
audiomixer
55. 可以尝试添加不同的混音效果,直到自己满意为止后,退出游戏。
音频的可访问性注意事项
在下面的练习中,将学会:
- 向 Unity 项目添加字幕。
- 在给定目标平台的情况下,推荐音频优化技术。
- 选择基于时间或基于操作的方法,例如触发器或事件来播放音频剪辑。
- 向场景添加特殊音频效果。
添加字幕
CCDatabase
56. 在Project窗口选择 Assets>Creativecore_Audio>ClosedCaptionSystem>Data, 在打开的文件夹中选中CCDatabase,点击鼠标右键,在弹出菜单中选择Rename;
57. 改名称为“Waterfall Scene Database”后,再双击该文件,打开CCDatabaseEditor窗口,默认窗口尺寸可能较小,可将窗口左右尺寸拉大一些;
58. 再打开的窗口中或许已经有了AmbientWaterfall 项,(如果没有的话,再Project窗口选择 Assets>Creativecore_Audio>Audio 文件夹中将 AmbientWaterfall 音频拖入到CCDatabaseEditor窗口)
59. 点击AmbientWaterfall 项,选择右侧 New Line按键,在编辑框中输入 “Water rushing" 后按一下键盘上的 Enter 按键;
60. 关闭 CCDatabaseEditor窗口,现在已经建立了一个 Closed Caption Database,下一步需要将其放到项目的prefab 预制件。
CCSystem
61. 在Project窗口中选择 Assets > CreativeCore_Audio > ClosedCaptionSystem > Prefabs > System 文件夹,将其中CCSystem 预制件拖拽到Hierarchy窗口中;
62. 选中该CCSystem, 在右侧Inspector窗口中的CCManager(Script)部分,点击Database右侧的选择按键,在弹出窗口中选择上述 ”Waterfall Scene Database“;再点击 Tracked For Pos 右侧的选择按键,在弹出窗口中选择”Main Camera“;
在游戏物件上添加字幕
63. 在Hierarchy窗口中选择 Waterfall游戏物件,再在右侧Inspector窗口中点击最下端 Add Component按键,在弹出菜单中选择CCSource(Script)选项
64. 然后将Project窗口中,Assets > CreativeCore_Audio > ClosedCaptionSystem > Prefabs > System 文件夹中 CCCanvas拖拽到 CCSource(Script) 属性中Cavas Prefab右侧的编辑框中,然后设置Max Distance 为15;
65. 运行游戏,导航玩家到流水瀑布的前方,查看 ”Water rushing"字幕是否显示,也可以动态调整 Max Distance值,或者调整一下字幕的位置,方便查看;
66. 激活 CCSource(Script) 属性中 Always Tracked,场景中将出现一个三角形的方向指示标志,指向水流声音的位置。
67. 测试完后,退出游戏。