目录
我们已经将 Ambient_Windmill Event(事件)作为 AkAmbient 组件添加到了场景中,不过最后还有一个细节问题需要解决:调整Windmill(风车)的距离衰减。玩家在位于起点位置时完全听不到 Windmill 声音,因为“听者”游戏对象 (Main Camera) 处在 Ambient_Windmill Blend Container(混合容器)的最大衰减半径之外。
有关 Wwise Unity Integration 听者 (AkAudioListener) 的详细信息,请参阅“第 9 课”。 |
为此,我们来增大 Ambient_Windmill 的 Attenuation ShareSet(衰减共享集)的 Max Distance(最大距离)。不过,应该增大多少呢?而且,如何确保玩家能够在起点位置听到声音呢?我们可以选择利用 Attenuation Sphere 来解决这些问题。
在 AkAmbient 组件中启用后,Attenuation Sphere 会显示一个球体,其半径由游戏对象的中心延伸到 Wwise 中设定的最大衰减距离。该球体可以直观地显示 Attenuation Editor(衰减编辑器)中设置的 Max Distance。这样方便对照游戏中的对象来评估距离。
接下来,我们将在《Wwise Adventure Game》中启用并配置 Attenuation Sphere。
-
在 Unity 菜单栏中,依次转到 Audiokinetic > Certification > 301 > Lesson 2,然后选择 Attenuation Spheres。
-
在 Hierarchy 中,转到 L2_2B - Village Environment Scene,然后展开 Wwise 并选中 Windmill 游戏对象。
-
在绑定的 AkAmbient 组件中,将 Show Attenuation Sphere 属性设为 Current_Event_Only。
在选择 Current_Event_Only 选项之后,您觉得应当可在 Scene 视图中看到代表 Attenuation 的红色球体,然而并非如此。在默认情况下,Attenuation ShareSet 中的这些 Max Distance 值并没有作为元数据包含在 SoundBank(音频包)中。为了能够生成球体,我们需要转到 SoundBank Settings(音频包设置)。
-
在 Wwise 菜单栏中,依次选择 Project > Project Settings(工程 > 工程设置)。
-
选中 SoundBanks(音频包)选项卡。
-
在 SoundBanks 选项卡中,启用 Max attenuation(最大衰减)。
现在,Wwise Unity Integration 便可获取所有 Attenuation ShareSet 中的全部 Max Distance,并使用其来判断 Attenuation Sphere 的大小。
您可以通过调用 AkWwiseProjectInfo.GetData().GetEventMaxAttenuation() 函数,来获取 Max Distance 并将其用于自定义脚本。
-
在 Project Settings 中,单击 OK(确定)。
您可能知道如何通过 Wwise 生成 SoundBank,不过其实也可利用 Unity 中的 Wwise Picker 来生成 SoundBank。
-
在 Unity 中,找到 Wwise Picker 并单击 Generate SoundBanks。
在单击 Generate SoundBanks 后,将会针对所有平台和语言生成全部的 SoundBank。此过程可能需要一些时间。在完成之后,所选 Windmill 游戏对象上将会显示球体。
-
使用 Hand Tool(单击 Q)来调节 Scene 视图,直到同时看到 Windmill 和 Main Camera。
我们注意到,球体并没有延伸到玩家的起点位置(Main Camera 所在位置)。所以,玩家应该完全听不到 Windmill 声音。接下来,我们转到 Wwise 并调节 Attenuation。
-
在 Wwise 中,搜索 Windmill,然后选中 Ambient_Windmill Blend Container。
-
在 Positioning(定位)选项卡中,单击 Edit(编辑)。
在 Attenuation Editor 的 Max distance 字段中,我们会看到当前的 Attenuation distance(衰减距离)为 35(对应于 Unity 中球体的大小)。
那么,应该把它设成多大呢?当然,我们可以在 Unity 和 Wwise 之间反复切换并查看结果,以此来决定将该值增大多少。不过为了更加精确一些,最好暂时先设置 Sphere Collider 的半径。
-
在 Unity Inspector 中,转到 Sphere Collider 并将 Radius 设为 35。
现在,我们可以在 Scene 视图中看到 Attenuation Sphere 边缘处的绿线。只要不缩放游戏对象(增大或减小),Sphere Collider 的 Radius 就会直接转换为 Attenuation 的 Max distance 属性。通过增大 Sphere Collider 的 Radius,我们可以直观地调节 Attenuation 所需的距离,使其延伸到 Player 所在区域。
-
单击并按住 Radius 属性,然后向右拖动,直到绿色 Sphere Trigger 延伸到 Player 所在区域。
一旦找到合适的值,我们就可以将其用在 Attenuation ShareSet 的 Max distance 字段中。
-
切换到 Wwise,然后在 Attenuation Editor 中将 Max distance 设为新的 Sphere Collider Radius 值(舍入取整)。
鉴于我们只是为了利用 Sphere Collider 获取一个临时的测量值,现在来将其重新设为 1。
-
在 Unity Inspector 中,找到 Sphere Collider 并将 Radius 属性设为 1。
最后,我们需要获取 SoundBank 包含的最新修改。
-
在 Wwise Picker 中,单击 Generate SoundBanks。
在 Unity 的 Wwise Picker 中生成 SoundBank 时,会同时将 Wwise Project 包含的最新信息更新到 Unity 工程中。
我们注意到,现在 Attenuation Sphere 增大了,Player 的起点位置被包含在了球体内。
如此一来,我们就可以精确评估 Unity 中声音的最大衰减范围。