原文:Unreal Engine 4 Audio Tutorial
做者:Tommy Tran
译者:Shuchang Liuhtml
在本篇教程中,你将学习如何以不一样方法播放3D音效,并经过UI控制音频音量。web
在视频游戏中,游戏音频一般指的是音乐,对白和音效。在当前的游戏时代,若是你的游戏项目里没有音频,基本就是未经打磨的半成品。app
音频能够增长游戏沉浸感。音乐能激起玩家的情绪反应,对白刻画了角色,推动了故事发展,音效提供了反馈和可信度。这些元素促使一款好游戏变成一款优秀的游戏。dom
在本篇教程,你将学习:编辑器
请注意,本篇教程涉及蓝图部份内容。若是你须要复习有关内容,请查看蓝图教程。ide
此外推荐你带上耳机学习实践本篇教程内容,由于其中涉及立体音频的内容。svg
注意:本篇教程只是Unreal Engine 4系列教程的其中一篇:函数
下载示例项目并解压。进入项目文件夹,双击SkywardMuffin.uproject打开项目。oop
按下Play能够运行游戏。游戏玩法是尽量踩着天空云朵往上跳跃,同时避免掉落地面,点击左键跳跃地面。学习
很解压的小游戏,对吧?为了强化放松解压的感受,咱们首先要播放一些宁静的钢琴曲。
在Content Browser打开Audio文件夹,这里有本篇教程要用到的全部声音资源。你能够经过在鼠标悬浮在图标上并点击播放图标进行试听。
要实现播放音乐很是简单,只要将音频资源拖拽到Viewport就好了。然而,这样音乐只会播放一遍,咱们必须手动设置音频资源的循环播放。双击打开S_Music。
会弹出一个带有简单Details设置的窗口,在Sound Wave部分设置勾选Looping设置。
接着,回到主编辑器将S_Music拖拽至Viewport。
这样关卡场景就会建立出一个带有S_Music音源的AmbientSound Actor,这个Actor会在游戏运行时播放S_Music。
接着,咱们要在蘑菇小人每次移动时播放一个音效,要实现这点,咱们要使用动画通知(Animation Notify)。
动画通知能够在动画的特定节点触发指定事件,咱们能够用它在实现不少功能。好比,建立一个动画通知来生成粒子特效。
在游戏中,重玩按钮会在蘑菇小人掉落地面时弹出来,利用动画通知,咱们就能够改成在死亡动画结束后再弹出按钮。
在本篇教程中,咱们将利用动画通知,实现蘑菇小人每次迈步走路时播放音效。
打开Characters\Muffin文件夹双击打开SK_Muffin_Walk,能够打开动画编辑器。
在Viewport下面的面板,咱们能看到名为Notifies的区域。亮灰色区域称之为通知轨道(Notify Track)。咱们能够在这里建立管理通知。
左右脚触地的时刻分别是第10帧和第22帧,因此咱们要分别在这两个节点上建立通知。在通知轨道上点击右键,从弹出菜单中选择Add Notify\Play Sound,建立名为PlaySound的通知。
接着,咱们须要将通知位置调整到第10帧处。
要想直接将通知移动到第10帧的位置会有点难度,由于咱们不知道它的具体位置。然而,咱们能够经过在时间轴调整播放进度条的位置来作位置参考。
首先,时间轴处于面板的底部。在暂停动画播放后,拖拽红色的播放进度条到Current Frame为10的位置。
如今,通知轨道上就会有点红色指示线用于标记当前播放位置。
拖拽PlaySound通知到红色指示线处。
接着,咱们要让通知能控制播放脚步声。
左键选中PlaySound,而后再Details面板的Anim Notify设置处,设置Sound为S_Footstep。
如法炮制设置另外一只脚的脚步声。按照以下操做:
如今,只要步行动画播放到第10帧和第22帧,就会触发通知播放S_Footstep。
关闭SK_Muffin_Walk回到主编辑器,按下Play运行游戏,四处走动停下脚步声吧。
仔细听听脚步声,你能够会注意到一些细节。双腿迈步的音效是如出一辙的!若是有办法让音效每次播放时都有些变化就行了。
在教程下一部分,咱们将实现当角色碰到云朵时播放音效。这一次,咱们会使用Sound Cue来动态调整音效。
Sound Cue是一种控制多个音效并进行合成播放的资源,咱们能够将一个正常的音频资源制做成Sound Cue。项目的每一个音效资源,也都能单独包装制做成Sound Cue类型资源来进行播放。
下面例子是用Concatenator节点将3个音频资源合成一个Sound Cue来按顺序播放:
若是改为用Random节点,播放Sound Cue的效果就是从3个音频中随机一个进行播放。
在本篇教程里,咱们将建立一个Sound Cue并控制它的音调。
首先,回到Audio文件夹,咱们要将S_Pop包装制做成Sound Cue,经过右键点击S_Pop,在弹出菜单中选择Create Cue进行建立。
这样会建立出名为S_Pop_Cue的新资源,双击S_Pop_Cue打开Sound Cue编辑器。
注意:编辑器外观跟材质编辑器外观很是类似,在此再也不赘述。若是你还不熟悉材质编辑器,请查看入门教程。
在图表中,咱们能够看到两个节点:Wave Player:S_Pop和Output。Sound Cue会播听任何与Output节点相连的音效(在本例里,它会播放S_Pop)。你能够经过在Toolbar上点击Play Cue来试听。
接着,咱们要试着修改它的音调。
为了修改声音的音调,咱们须要用到Modulator节点。建立节点并以下图进行链接:
如今就能够修改音调了。选中Modulator节点,在Details面板能够看到两个相关字段:Pitch Min和Pitch Max。数值若是低于1,说明音调能够变低,反之亦然。数值为1说明保持声音本来的音调。
在本例中,咱们只会调高声音音调,所以将Pitch Min设为1.0,Pitch Max设为2.0。
如今,每次播放Sound Cue时,声音音调都会随机在原音调和原音调的两倍之间。
回到主编辑器,打开Blueprints文件夹。打开BP_Cloud并点进CloudTouched函数里。该函数在玩家碰到云朵时就会调用,很适合在此时播放Sound Cue。
有如下两种节点都适合用来播放声音:
Play Sound 2D:不考虑衰减和空间定位进行声音播放(关于这两个概念等下讲解)。该节点适合用于播放不是从游戏世界中产生的声音,好比背景音乐和UI音效。
Play Sound at Location:指定3D空间位置做为音源进行声音播放。该节点适合用于模拟声音从某个位置某个方向传出的效果。
因为云朵是游戏世界里的具体实体,声音理所固然要从实体中传出来才显得逼真。所以咱们在节点末端添加Play Sound at Location节点。
随后,将Sound设置为S_Pop_Cue。
点击Compile并返回主编辑器,按下Play运行游戏,每次碰到运动,你应该都能听到不一样的音调声音。
如今声音有了高低音效之分了,但听起来没有什么立体效果。要实现这点,咱们须要将声音空间化(spatialize)。
空间定位是一种让声音听起来处于3D空间的处理手段。声音若是从左边传来,那左边的耳机声音会更清楚,反之亦然。
除了能加强沉浸感,空间定位还能完善游戏玩法。像守望先锋和反恐精英等竞技游戏中,立体声效可让玩家敏锐地感知对手的位置。
在本篇教程中,咱们会对某些云朵音效启用空间定位。
有如下两种方法对Sound Cue启用空间定位:
在本例中,咱们将使用第二种方法。打开S_Pop_Cue,在Details面板的Attenuation设置处勾选Override Attenuation,这样能够启用Attenuation Overrides部分设置。
咱们能够观察Attenuation Overrides处的箭头是否可点判断空间定位是否启用。Spatialize设置代表声音是否会衰减。
如上图进行设置而后关闭S_Pop_Cue。接着,咱们要指定声音的3D空间位置。
打开BP_Cloud并建立GetActorLocation节点,随后将其与Play Sound at Location节点的Location引脚相连。
这样声音就会在云朵的位置播放出来。
点击Compile并返回主编辑器。按下Play运行游戏,操控小人触碰云朵,你能够感受到声音是从不一样的地方传来的。
注意:默认状况下摄像机就是音频监听者(audio listener)。这意味着咱们是以摄像机的视角去听那些声音的。若是你想修改监听者对应的Actor,可使用Set Audio Listener Override节点。
你可能注意到了有些云是会下雨的,若是它没有对应的下雨声那就不真实了!接着,咱们要为其添加雨声,并启用衰减(attenuation)来声音产生远近变化。
与其使用节点播放雨声,咱们可使用Audio组件。使用组件的一大优势就是它能在云的位置自动播放。
打开BP_Cloud,在Components面板添加Audio组件,将其命名为RainAudio。
选中组件,在Details面板找到Sound设置,将Sound设为S_Rain。
普通云朵不该该播放雨声,即普通云朵要禁用RainAudio组件,咱们在Details面板找到Activation设置并取消勾选Auto Activate。
雨云则要启用RainAudio组件,咱们能够在EnableRain函数作这件事,只有雨云实例才会执行该函数。打开EnableRain函数并添加以下高亮节点:
接着,咱们须要启用并设置衰减。
在Components面板选中RainAudio,在Details面板找到Attenuation设置,启用Override Attenuation。
衰减设置肯定了空间距离与声音衰减的比例关系。在Attenuation Overrides设置里,能够修改如下两个参数:
Radius(半径):声音开始衰减的最远距离
Falloff Distance(衰减距离):声音衰减至静默的距离,这个距离从Radius往外开始算起。
看看以下例子:
当玩家处于内圆半径时(取决于Radius),音量为100%。当玩家从内圆走向外圆边缘时,音量会逐渐衰减至0%。
对于本篇教程,咱们将Radius设为300,FalloffDistance设为400。
这表明玩家在距离300单位内,音量是100%的,当玩家距离逐渐接近700(300 + 400)单位时,音量减至0%。
有时当云朵从屏幕中移除了,但玩家还未离开声音衰减范围内的状况下,声音会被忽然切断。为了解决这个问题,咱们给音效加上渐隐效果。
切换到Event Graph并找到FadeOut事件。咱们能够经过在My Blueprint面板找到Graphs部分设置,双击EventGraph列表下的FadeOut。
在节点末端添加以下高亮节点:
FadeOut节点会在玩家触碰云朵时触发执行,Timeline (FadeTimeline)节点的Alpha字段会在一段时间内输出从1到0。经过这个数值来控制RainAudio渐隐。
注意:你能够双击Timeline节点打开页签查看节点是否能正常工做。想了解更多关于Timelines的内容,请查看官方文档。
接着咱们还须要干一件事才能听到S_Rain。当声音的音量降到0%时,它会中止播放。因为在游戏中,一开始咱们极可能处于声音的衰减距离外,S_Rain天然就会降至0%。当咱们再次进入衰减距离内时,因为声音已中止播放,就不会听到任何东西了。
咱们能够经过Virtualize when Silent修正这一点,启用该设置能够保证不管音量大小,声音始终处于播放状态。
点击Compile并关闭BP_Cloud,打开Audio文件夹并打开S_Rain,在Sound设置处启用Virtualize when Silent。
如今,S_Rain即便处于静音状态也会始终播放。关闭S_Rain并返回主编辑器,按下Play运行游戏,控制小人接近雨声的有效范围内听听效果吧。
在教程最后一部分,咱们将会经过Sound Classes(声音类)和Sound Mixes(混音)控制声音音量。
用声音类能够简便地将多个声音组织起来。好比,你能够将全部音乐组织成一个声音类,全部音效组织成另外一个类。
为了能在游戏过程当中调整声音类的参数(音量,音调等),咱们可使用混音。混音本质是一张表格,表格每行的表头就是声音类。每行数据都表示该行声音类的参数调整。
下图说明了一个混音所包含的数据:
使用了上述的混音,Music声音类的全部声音都会以本来音量的一半来播放。Effect的声音则本来音调的两倍进行播放。
如今,让咱们来着手建立声音类。
在本篇教程,咱们将分别调整声音和音效的音量。这意味着咱们须要两个声音类。在Content Browser里,点击Add New并选择Sounds\Sound Class,将其重命名为S_Music_Class。
再建立另外一个声音类命名为S_Effects_Class。
接着,咱们须要指定每一个声音的声音类。首先对音乐资源进行设置。打开S_Music,在Sound设置处将Sound Class修改成S_Music_Class。
作好以上设置后,就关闭S_Music。
接着要设置音效资源。与其一个个指定声音类,咱们全选如下资源:
随后,右键点击选中资源,选中Asset Actions\Bulk Edit via Property Matrix,这样就能打开属性矩阵编辑器并看到以上资源。
经过编辑器咱们能够同时编辑选中资源的通用属性。
在Details面板展开Sound分支,点击Sound Class右侧的网格图标。
选择S_Effects_Class,而后关闭属性矩阵编辑器。
就此全部的音频都设置好声音类了,接着,咱们要建立混音,并经过蓝图来控制调整它。
在Content Browser里,点击Add New并选中Sounds\Sound Mix,将新建混音命名为S_Volume_Mix。
咱们能够经过滑条控制每一个声音类的音量,项目里已经提早建立好了滑条资源,找到UI文件夹并打开WBP_Options。
为了实现音量调节,咱们须要获取滑条数值并传给混音。咱们首先实现音乐音量控制。
将编辑器切换成Graph模式,并在My Blueprints面板找到Variables设置,选中MusicSlider,而后在Details面板点击On Value Changed旁边的按钮。
这样图表就会建立一个On Value Changed (MusicSlider)事件,每次滑动滑条时,事件都会触发执行。
如今,咱们须要设置S_Volume_Mix里的S_Music_Class声音类的音量。这里要利用Set Sound Mix Class Override节点,该节点容许咱们指定一个混音和一个声音类。若是混音里不存在指定声音类,它会自动将其添加进去。若是已存在,则更新对应的声音类。
添加Set Sound Mix Class Override节点,并作以下设置:
接着,以下链接节点:
如法炮制设置EffectsSlider,将In Sound Class引脚修改成S_Effects_Class。
如今,只要滑条数值发生变更,S_Volume_Mix就会修改相关声音类的音量。
最后咱们还要激活对应混音,才能让这一切运做起来。
对本例而言(用UI控制音量),最好是在游戏一开始激活混音。这样声音类一开始就能用上混音设置。然而,简单起见,本例中咱们仍是在控件中激活混音。
建立Event Pre Construct节点,这个节点跟蓝图的Event BeginPlay节点很是类似。
为了激活混音,咱们要使用Push Sound Mix Modifier节点,建立对应节点并与Event Pre Construct相连,随后设置In Sound Mix Modifier为S_Volume_Mix。
这样在WBP_Options生成时就能激活S_Volume_Mix。
点击Compile并关闭WBP_Options。按下Play运行游戏,点击M键弹出滑条,调整滑条感觉音量的变化吧。
你能够在这里下载完整项目。
如你所见,在Unreal Engine 4里使用音频很是简单。若是你想了解更多关于音频系统的内容,点击查阅官方文档。你还能够实现像混响或EQ这样炫酷的效果,记得也关注下即将推出的全新音频引擎。
若是你还想继续学习引擎其余内容,点击下篇教程,将讲解有关粒子特效的内容。