第 2 课

目录

衰减球体

我们已经将 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。

  1. 在 Unity 菜单栏中,依次转到 Audiokinetic > Certification > 301 > Lesson 2,然后选择 Attenuation Spheres

  2. 在 Hierarchy 中,转到 L2_2B - Village Environment Scene,然后展开 Wwise 并选中 Windmill 游戏对象。

  3. 在绑定的 AkAmbient 组件中,将 Show Attenuation Sphere 属性设为 Current_Event_Only

    在选择 Current_Event_Only 选项之后,您觉得应当可在 Scene 视图中看到代表 Attenuation 的红色球体,然而并非如此。在默认情况下,Attenuation ShareSet 中的这些 Max Distance 值并没有作为元数据包含在 SoundBank(音频包)中。为了能够生成球体,我们需要转到 SoundBank Settings(音频包设置)。

  4. 在 Wwise 菜单栏中,依次选择 Project > Project Settings(工程 > 工程设置)。

  5. 选中 SoundBanks(音频包)选项卡。

  6. 在 SoundBanks 选项卡中,启用 Max attenuation(最大衰减)。

    现在,Wwise Unity Integration 便可获取所有 Attenuation ShareSet 中的全部 Max Distance,并使用其来判断 Attenuation Sphere 的大小。

    [技巧]

    您可以通过调用 AkWwiseProjectInfo.GetData().GetEventMaxAttenuation() 函数,来获取 Max Distance 并将其用于自定义脚本。

  7. 在 Project Settings 中,单击 OK(确定)。

    您可能知道如何通过 Wwise 生成 SoundBank,不过其实也可利用 Unity 中的 Wwise Picker 来生成 SoundBank。

  8. 在 Unity 中,找到 Wwise Picker 并单击 Generate SoundBanks

    在单击 Generate SoundBanks 后,将会针对所有平台和语言生成全部的 SoundBank。此过程可能需要一些时间。在完成之后,所选 Windmill 游戏对象上将会显示球体。

  9. 使用 Hand Tool(单击 Q)来调节 Scene 视图,直到同时看到 WindmillMain Camera

    我们注意到,球体并没有延伸到玩家的起点位置(Main Camera 所在位置)。所以,玩家应该完全听不到 Windmill 声音。接下来,我们转到 Wwise 并调节 Attenuation。

  10. 在 Wwise 中,搜索 Windmill,然后选中 Ambient_Windmill Blend Container。

  11. 在 Positioning(定位)选项卡中,单击 Edit(编辑)。

    在 Attenuation Editor 的 Max distance 字段中,我们会看到当前的 Attenuation distance(衰减距离)为 35(对应于 Unity 中球体的大小)。

    那么,应该把它设成多大呢?当然,我们可以在 Unity 和 Wwise 之间反复切换并查看结果,以此来决定将该值增大多少。不过为了更加精确一些,最好暂时先设置 Sphere Collider 的半径。

  12. 在 Unity Inspector 中,转到 Sphere Collider 并将 Radius 设为 35

    现在,我们可以在 Scene 视图中看到 Attenuation Sphere 边缘处的绿线。只要不缩放游戏对象(增大或减小),Sphere Collider 的 Radius 就会直接转换为 Attenuation 的 Max distance 属性。通过增大 Sphere Collider 的 Radius,我们可以直观地调节 Attenuation 所需的距离,使其延伸到 Player 所在区域。

  13. 单击并按住 Radius 属性,然后向右拖动,直到绿色 Sphere Trigger 延伸到 Player 所在区域。

    一旦找到合适的值,我们就可以将其用在 Attenuation ShareSet 的 Max distance 字段中。

  14. 切换到 Wwise,然后在 Attenuation Editor 中将 Max distance 设为新的 Sphere Collider Radius 值(舍入取整)。

    鉴于我们只是为了利用 Sphere Collider 获取一个临时的测量值,现在来将其重新设为 1。

  15. 在 Unity Inspector 中,找到 Sphere Collider 并将 Radius 属性设为 1

    最后,我们需要获取 SoundBank 包含的最新修改。

  16. 在 Wwise Picker 中,单击 Generate SoundBanks

    在 Unity 的 Wwise Picker 中生成 SoundBank 时,会同时将 Wwise Project 包含的最新信息更新到 Unity 工程中。

我们注意到,现在 Attenuation Sphere 增大了,Player 的起点位置被包含在了球体内。

如此一来,我们就可以精确评估 Unity 中声音的最大衰减范围。