第 3 课

目录

利用 Trigger 加载 SoundBank

在《Wwise Adventure Game》中,我们按照进度(如当前任务)和区域(如沙漠或地牢)对游戏内容进行了拆分。也就是说,在 Player 进入 Woodlands(林地)时,将会把包含 Waterfall Event(事件)的 SoundBank(音频包)加载到内存中以便在必要时发送 Event。一旦 Player 离开该区域并停止发送 Event,即可从内存中卸载包含 Waterfall Event 的 SoundBank,从而释放内存资源以供加载其他 SoundBank。

为此,我们可以利用 Trigger 来注册 AkAudioListener 是否进入某个区域(如 Woodlands)。

[技巧]

如需进一步了解 Trigger Collider,请参阅“第 1 课”。

在 Main Camera(绑定有 AkAudioListener 组件的游戏对象)上,我们会看到一个 Sphere Trigger Collider。在该 Trigger Collider 进入区域 Trigger Collider 时,将会通过 AkBank 脚本加载该区域对应的 SoundBank。接下来,我们将创建一个 Cube 游戏对象,并把 Cube Collider 设为 Is Trigger,并将其添加到 Woodlands 区域的游戏对象,然后通过 AkBank 脚本来加载 Woodlands Soundbank。

  1. 在 Unity 菜单栏中,依次转到 Audiokinetic > Certification > 301 > Lesson 3,然后选择 Loading SoundBanks using Triggers

    在 Unity 中,有多种类型的 Collider 可供使用。对于 Woodlands 区域,我们将对 Box Trigger 进行缩放,以使其覆盖从 Village(村庄)小桥一直到 Cave(山洞)的整个区域。首先,我们来调节 Scene 视图以便仔细查看 Woodlands 区域。

  2. 在 Hierarchy 中,选中 Waterfall 游戏对象,然后将鼠标移到 Scene 视图中并单击 F

  3. 在 Unity 菜单栏中,依次转到 GameObject > 3D Object,然后选择 Cube

    为了方便起见,我们来为游戏对象取个能够表明其作用的恰当名称。

  4. 右键单击 Cube 游戏对象,然后选择 Rename 并输入 Woodlands Trigger

    在创建 Cube 游戏对象后,会将 Box Collider 自动添加到该游戏对象。Box Collider 设有多个属性字段,如 Size(相对于游戏对象的大小)、Center(相对于中心点)、Material(用于定义摩擦力等物理属性)、Is Trigger(允许其他 Collider 进入其 Collider 形状 – 详见“第 1 课”)。Woodlands Trigger 应当是个允许 Player 进入和离开的 Collider 形状,所以接下来我们将其设为 Is Trigger。

  5. 在 Inspector 中,找到 Box Collider 并选中 Is Trigger 复选框。

    因为其他 Collider 可以进入该 Box Collider,所以最终需要隐藏 Collider 的 Mesh;不过,在开发过程中我们先来将其设为透明材质。这样在进入 Trigger 时可以看得很清楚。为此,我们可以使用预制的 Trigger_Red 材质。它是一个设为透明红的 Shader(用于定义形状和颜色的代码文件)。

  6. 在 Project 视图中,搜索 Trigger_Red

  7. Trigger_Red 材质从 Project 窗口拖到刚才在 Hierarchy 中创建的 Woodlands Trigger 游戏对象上。

    现在,我们会看到 Collider 的外部显示成了透明红。不过,注意在进入其内部是看不到形状的。

    接下来,我们要调节 Trigger Collider 以使其覆盖从 Village 一直到 Cave 之前的整个 Woodlands 区域。为此,我们将用到 Move Tool、Rotate Tool 和 Scale Tool。

    [备注]

    建议不要着急使用组合工具 (Move, Rotate or Scale),最好先熟悉下单独的 Move Tool、Rotate Tool 和 Scale Tool。

    使用 Scale Tool 放大游戏对象。

  8. 在 Unity 工具栏中,选中 Scale Tool

  9. 单击并按住中间的灰色方块,然后向右拖动鼠标,直到方盒的高度超过 Tree(大树)。

  10. 使用 Move ToolRotate ToolScale Tool 对游戏对象进行最后调节,使其覆盖整个 Woodlands 区域。

    Collider 可以覆盖临近的区域(如 Pine Forest 的部分区域),但请注意,朝向 Village 的端面仅仅需要覆盖部分小桥,不要全部覆盖。因为,在这里 Village Trigger 会加载 Village SoundBank,而 Woodlands SoundBank 中的所有 Event 都要停止。接下来,我们将添加 AkBank 脚本,以便在 Player 进入 Box Collider 时加载 Woodlands SoundBank。

  11. 确保选中 Woodlands Trigger 游戏对象,然后在 Inspector 中单击 Add Component,接着搜索并选中 AkBank 脚本。

    接下来,我们指派 SoundBank。

  12. Bank Name 属性中,依次展开 Banks > Default Work Unit > Region,然后双击 Woodlands

    接下来,我们将其设为 AkTriggerEnter,以此检测是否有其他 Trigger 进入该 Trigger。

    [技巧]

    正如“第 1 课”所述,在需要更改 SoundBank 加载时机时,首先要将其设为 Nothing,然后再选择新的选项。这样可以避免同时选中两个选项。

  13. Load On 属性中,仅选中 AkTriggerEnter 一项。

  14. Unload On 属性中,仅选中 AkTriggerExit 一项。

    现在,我们将 Woodlands SoundBank 设成了在进入 Collider 时加载并在离开时卸载;不过,目前还没有指定要检测的游戏对象。在这种情况下,将会检测进入或离开 Trigger 的所有对象,包括地面 Collider、Evil Crawler(爬行怪)等等。因为只有在进入 Collider 时才要检测听者 (Main Camera),所以我们需要添加 AkTriggerEnter 脚本并指派 Trigger Object。

  15. 在 Inspector 中,单击 Add Component,然后搜索并选中 AkTriggerEnter

  16. Main Camera 游戏对象从 Hierarchy 拖到 AkTriggerEnter 的 Trigger Object 属性中。

  17. 在 Inspector 中,单击 Add Component,然后搜索并选中 AkTriggerExit

  18. Main Camera 游戏对象从 Hierarchy 拖到 AkTriggerExit 的 Trigger Object 属性中。

    现在,我们为在进入和离开 Trigger 时分别加载和卸载 SoundBank 执行了所有必要步骤。不过,最好每次都测试一下整合效果。为此,我们来在运行时将性能分析器连接到游戏。

  19. 在 Wwise 中,单击 Remote…(远程...)。

  20. 在 Remote Connections(远程连接)窗口中,选中 Wwise Adventure Game (Editor),然后单击 Connect(连接)。

  21. 在 Unity 中,单击 Play

  22. 跑到 Woodlands。

  23. 再次单击 Play 按钮退出 Play 模式。

  24. 在 Wwise 菜单栏中,转到 Layouts(布局),然后选择 Profiler(性能分析器)。

  25. 往回拖动时间光标,直到 Advanced Profiler(高级性能分析器)的 Memory(内存)选项卡中显示 Woodlands SoundBank。

我们注意到,一旦 Player 进入 Woodlands 区域,就会加载 Woodlands SoundBank。不过,假如继续向左拖动时间光标,在某个时刻会不显示 Woodlands.bnk。也就是说,在 Player 进入 Woodlands Trigger 时,并没有从游戏关卡一开始就加载该条目。


此页面对您是否有帮助?