第 2 课

目录

自定义 Volumetric 脚本

虽然 AkAmbient Simple、Large 和 MultiPosition 模式对大部分环境声来说效果都不错,但要注意它们全部都是基于发声点的。也就是说,声音位置会驱动 Attenuation ShareSet(衰减共享集)并决定音量。这可能会给混音带来很大的挑战。因为整个区域中环境声的音量是不稳定的,所以必须在不同地点反复评估混音电平。在这种情况下,我们需要自定义脚本行为。为了对《Wwise Adventure Game》中的环境声进行混音,我们专门创建了 EventPositionConfiner 脚本。

EventPositionConfiner 脚本会查找互连的 Trigger Collider,并根据 AkListener 的位置不断移动声音位置。如此一来,只要玩家进入 Trigger Collider,就会将声音的 Attenuation ShareSet 的距离设为 0。

在玩家退出 Trigger Collider 时,Attenuation distance 会根据从“听者”游戏对象到 Trigger Collider 上最近点的距离变化。这样的话 Sound Position 周围的球面衰减就会生成一个像 Trigger Collider 网格一样的衰减范围,而只在边缘处稍作修剪。

[技巧]

EventPositionConfiner 脚本会按照 Inspector 中指定的时间间隔来更新声音位置。假如您创建类似的脚本,最好将重定位速度设得很快(快到足以跟上 Main Camera / AkListener 的速度),并根据 Attenuation ShareSet 在近距离位置适当添加散布效果(假如声音位置更新速度不够快,听起也不太会被注意到)。

接下来,我们将把 EventPositionConfiner 添加到 Village(村庄)中的 River(小河)。

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

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

  3. 在 Inspector 中,单击 Add Component,然后搜索并选中 EventPositionConfiner

    在 Inspector 中,我们会看到 Event Position Confiner 组件。其中设有两项属性:Update Interval(应保留设为 0.05)和 Event(应设为 Ambient_River Event)。

  4. 在 Event Name 属性中,依次展开 Events > Ambient > SoundBankSpecific,然后双击 Ambient_River Event。

    现在,我们添加了 EventPositionConfiner 脚本,并指派了 River 声音。为了更好地了解其工作原理,接下来我们一边试玩游戏,一边监控 Collider Shape 内包含的声音位置。

  5. 在 Unity 菜单栏中,依次转到 Window > Layouts,然后选择 2 by 3

    该布局会同时显示 Scene 视图和 Game 视图,便于在试玩游戏的同时监控声音位置(只会在 Scene 视图中显示)。

  6. 在 Hierarchy 中,转到 L2_4B - Village Environment Scene,然后展开 Wwise 并选中 River 游戏对象。

  7. 将鼠标移到 Scene 视图中,然后按下 F 来聚焦在 River 游戏对象上。

    现在,我们应该可以在 Scene 视图中看到 River。在 River 周围,会显示绿色框线(代表 Box Collider)。通过向后滚动鼠标滚轮或移动镜头,来确保可以看到整个 Trigger Collider。

  8. 调节 Scene 视图,直到可以看到整个 Trigger Collider。

    一切就绪!接下来,只要试玩游戏并测试所作设置就可以了。

    [技巧]

    确保在 Game 视图中禁用了 Maximize On Play。该选项默认处于禁用状态,不过您可能为了方便启用了它。

  9. 单击 Play 按钮进入 Play 模式。

    [备注]

    EventPositionConfiner 脚本经过专门设计,它可以将声音位置显示为蓝色小球。跟图标和其他小控件一样,该球体并不会显示在 Game 视图中或游戏的编译版本中。

  10. 旋转 Main Camera,并在 Scene 视图中找到蓝色小球。

    我们注意到,在 Camera 位于 Trigger Collider 之外时,球体会跟最近的边缘对齐。

  11. 将 Main Camera 移到 Trigger Collider 之内。

    我们注意到,现在球体被放在了 Main Camera 正下方(镜头显示为摄像机小图标)。

  12. 按下 ESC 打开《WAG》游戏菜单,然后再次单击 Play 按钮退出 Play 模式。

如此一来,只要 AkListener(已添加到 Main Camera)处在 Trigger Collider 之内,声音就会完全集中到一起。在其处在 Trigger Collider 之外时,声音会依据 Attenuation 的 Distance 设置随着距离变化。记住,EventPositionConfiner 脚本适用于所有 Collider(包括设为 Convex 的 Mesh),这也极大地提高了它的适用性。