Wwise声音系统
概述
Wwise声音系统(Wwise Sound System )使用Wwise音频引擎,专门用于播放wem格式音频,它允许声音在游戏过程中被实时修改。Wwise音频可以被打包在bank中用于不同的场景,在编辑器中可以使用Wwise音频引擎添加2D/3D音效和动作音效。
声音系统配置
依次点击配置(Config) -> 项目设置(Project Settings),弹出配置页面后点击通用项目设置(General Project Settings),在声音设置(Sound Settings)中选择声音系统(Sound System)为WWISE(修改后需要重启生效)。
配置声音系统后,在声音设置(Sound Settings)中点击设置路径(Settings Path)的 按钮,在弹出的文件浏览器(File Browser)窗口中选择Wwise资源,同样的方法在声音库路径(Sound Bank Path)中选择库信息路径。
加载Bank
声音库(Sound Bank)是Wwise制作的音频文件数据包,需要被导入才能播放。可以在场景中创建任意一个对象用于导入这些Wwise音效。依次点击 Create Game Object -> Game Object 创建对象,选中该对象,然后点击添加组件(Add Component)按钮,选择Sound Bank Component创建一个声音库组件。
创建好声音库组件后,选择声音库(Sound Bank)属性,配置一个库名(Bank Name),然后对应的库(Bank)就会被导入。导入后可以在任意需要用到Wwise音效的地方使用该库中包含的音频文件,若要使用其他的库中的音频文件,可以再创建几个声音库组件用于导入这些库。
添加UI音效
UI音效一共有三类,分别为鼠标移入音效、鼠标移出音效和点击音效。
打开UI编辑器
在资源预览窗口空白处右键选择UI文件(UI File),双击该UI文件打开UI编辑器。
鼠标移入音效
鼠标在移入该控件范围内时会播放绑定的音效。
在UI编辑器中选中需要编辑的控件,然后在该控件的属性表中,选择InSound属性,在弹出的选择事件库(Select Event Bank)窗口中选择一个事件后点击OK(也可以双击事件)即可为该控件设置此属性。
此后鼠标移入该控件后便会触发该事件。
鼠标移出音效
鼠标放置在该控件上方后再移出该控件的范围会播放绑定的事件。
修改控件的OutSound属性即可为控件添加对应的事件,具体添加方式和鼠标移入属性相同。
点击音效
点击该控件后会播放绑定的事件。
修改控件的ClickSound属性即可为控件添加对应的事件,具体添加方式和鼠标移入属性相同。
添加场景音效
在场景中可以添加场景音效,在编辑器中添加场景音效的方式如下:
在大纲(Hierarchy)面板中选择需要添加场景音效的对象,然后点击添加组件按钮,添加声音独立组件(Sound Standalone Component)。
添加声音独立组件后,选中LSoundStandalone并修改事件名属性,选择一个已被导入的事件,若要循环播放,可以勾选循环(Loop)选择框。
由于Wwise音效暂时没有自动播放的功能,因此想要播放配置的音效,需要在脚本中获取LSoundStandalone对象并调用对应的Play函数。可以通过如下方式在脚本中获取LSoundStandalone对象:在编辑器中选中LSoundStandalone,然后修改其字符串标签(String Tag)属性。
此外继续添加一个脚本组件(LScript),并在脚本文件(Script File)中为该脚本组件配置对应的脚本。
可以在脚本组件对应的脚本中使用如下代码利用字符串标签获取编辑器中的对象,该函数第一个参数为对象的Tag,第二个参数为对象类型,该函数可以从指定类型的所有对象中找出拥有指定字符串标签的对象。
--通过Tag查询对象
local function get_object_by_tag(tag_name, class_type_name)
local lscene = nx_value("lscene")
if not nx_is_valid(lscene) then
return nx_null()
end
if tag_name == nil then
return nx_null()
end
local tag_table = lscene:QueryObjectListByTag(tag_name, class_type_name)
local tag_count = #tag_table
if tag_count == 0 then
return nx_null()
elseif tag_count == 1 then
return tag_table[1]
elseif tag_count > 1 then
for i = 1, tag_count do
nx_log("info, get_object_by_tag, "
..nx_string(i) .." : "..nx_string(tag_table[i].StringTag))
end
return nx_null()
end
end
在启动场景时会调用绑定的脚本的on_begin_play事件,关闭场景则会调用on_end_play事件,因此要在进入场景时播放Wwise音频,可以在脚本的on_begin_play事件中调用get_object_by_tag获取LSoundStandalone组件并获取其代理对象,然后调用Play函数播放绑定的事件。
local box = get_object_by_tag("wwise_sound", "LSoundStandalone")
sound3d.VisBase:Load()
sound3d.VisBase:Play()
添加动作音效
可以给角色动作绑定音效,当动作播放到指定动作帧时就会播放绑定的音效,添加动作音效方式如下:
找到需要添加音效的角色的资源文件。
双击资源文件后打开组合体编辑器,在左边的动作列表(Action List)中展示了所有的动作条目,其中动画序列类型的动作条目(粉色)以及蒙太奇类型的动作条目(紫色)可以附加声音资源(如图所示,当前选中的是跑的动作,类型为动画序列,因而添加完成后会在跑时触发音效)。
双击该动作条目进入动画编辑器,右击通知(Notify)进度条的空白部分,依次选择添加通知(Add Notify) -> 播放声音(Play Sound),添加一段音频。
在通知中添加音频后点击该段音频,在细项(Details)面板的事件名(Event Name)中为此段音频选择对应的事件即可在对应动作过程中播放。
给生态添加脚步声
我们可以给各类生态添加音效,使得角色在这些生态上移动时可以播放一些预设的脚步声。
创建预制件
在大纲(Hierarchy)面板中,右击体素地形对象(LVoxelTerrain),弹出快捷菜单,点击查找资产( Find Asset)。在项目(Project)面板的资源预览(Resource Preview)窗口中将显示该体素地形的资源文件所在目录。
在资源预览(Resource Preview)窗口中的空白处右击,弹出快捷菜单,点击预制件(Prefab),弹出选择父类(Pick Parent Class)窗口,选择物理材质(Physics Material)类型,点击OK,然后在弹出的命名窗口中输入预制件名称(此处以ash生态为例,因此将此处预制件命名为ashes,方便查找),点击OK即可创建一个预制件,用于绑定脚步声。
在资源预览(Resource Preview)窗口中双击创建的预制件,打开预制件编辑窗口。在详细面板(Details Panel)中名称(Name)下的材质名称(Material Name)属性中输入想要添加脚步声的生态名(运行时会自动查找该材质名对应的音频文件进行播放,此处需要保证生态名填写正确)。
绑定预制件
在项目(Project)面板的资源预览(Resource Preview)窗口中双击体素地形资源,打开体素地形编辑界面。选择生态(Ecology)页签,在行星生态(Planetary Ecology)下显示了所有用到的生态。
双击需要添加脚步声的生态(与预制件的材质名对应),进入生态编辑界面。将创建的预制件从项目(Project)面板的资源预览(Resource Preview)窗口中拖入到生态编辑(Edit Ecology)面板下的物理引用(Physx Reference)属性插槽中。
添加脚步音效
参照添加动作音效的方法,首先在项目(Project)面板的资源预览(Resource Preview)窗口中找到需要添加音效的角色的资源文件。
双击资源文件后打开组合体编辑器(Actor Editor),在左边的动作列表(Action List)中展示了所有的动作条目,其中动画序列类型的动作条目(粉色)以及蒙太奇类型的动作条目(紫色)可以附加声音资源(如图所示,当前选中的是奔跑动作,类型为动画序列,因而添加完成后会在奔跑时触发音效)。
双击该动作条目进入动画编辑器(Animation Editor),右击通知(Notify)进度条的空白部分,依次选择添加通知(Add Notify) -> 脚步声(FootStep),添加一段音频。
在通知中添加音频后点击该段音频,点击详细面板(Details Panel)的事件名(Event Name)属性旁边的 按钮,弹出选择事件库(Select Event Bank) 窗口,选择Play_Player_Footsteps_Material,点击OK。