第 5 课

目录

利用 AkState 组件设置 State

就跟发送 Event(事件)一样,我们既可利用组件也可通过脚本来设置 State(状态)。预制组件允许便捷地设置 State,脚本则可实现更加精确的控制。在将声音集成到游戏中时,两种方式可以说是相辅相成的。

为了便于设置 State,Wwise Unity Integration 提供了预制的 AkState 脚本。AkState 非常易于使用,借助其提供的 Trigger On 选项,我们可以迅速设置 State 变化,以此满足大部分应用需要。接下来,我们将学习如何在 Player 进入 Village(村庄)中的 MusicRegion_WwizardMagicHouse Trigger 时设置 MagicZone State。在 State 发生变化时,将会为 Master Audio Bus(总音频总线)应用效果器。如此一来,一旦 Player 进入 Wwizard(魔法师)的小屋,整个声景就会随着 Wwise Flanger 变换音调。

  1. 在 Unity 菜单栏中,依次转到 Audiokinetic > Certification > 301 > Lesson 5,然后选择 Setting States using the AkState Component

  2. 在 Hierarchy 中,依次展开 Wwise > Music Zones,然后选中 MusicRegion_WwizardMagicHouse

    在 Wwizard House 中,我们会看到用来标记房屋内部尺寸的绿色框线。这个就是 MusicRegion_WwizardMagicHouse Trigger。接下来,我们会将其关联到 AkState。

  3. [备注]

    假如您看不到绿色框线,请确保在 Inspector 中展开 Mesh Collider 组件。

  4. 在 Inspector 中,单击 Add Component,然后搜索并选中 AkState

    首先,我们来选择 State。

  5. 在 AkState 组件的 State Name 属性中,依次展开 States > MusicStates > MagicZone,然后选中并双击 MZ2_InsideHouse State。

    一旦调用 Trigger On 选项,AkState 组件便会设置指定的 State。接下来,我们将使用 Trigger 来检测 Player 何时进入 Wwizard House。为此,我们需要选择 AkTriggerEnter 条件。

    [技巧]

    在 Trigger On 属性中,有可能会同时选中多个条件。所以,假如您只想选择一个条件,需要先选择 Nothing,然后再选择新的 Trigger On 条件。

  6. Trigger On 属性中,仅选中 AkTriggerEnter 一项。

    在“第 1 课”中,我们使用了 AkTriggerEnter 来指示 Player 拾获 Coin(金币)。同样地,在此我们必须声明 Trigger 要检测的游戏对象。为此,我们需要将 AkTriggerEnter 脚本添加到 MusicRegion_WwizardMagicHouse Trigger,并为其指派 Player 游戏对象。

  7. 单击 Add Component,然后搜索并选中 AkTriggerEnter

  8. Player 游戏对象从 Hierarchy 拖到 AkTriggerEnter 的 Trigger Object 属性中。

    如此一来,一旦 Player 进入 Trigger,便会把 MagicZone State 设为 Inside,同时将 MagicZone 效果应用到游戏中的所有声音。现在,我们设置了进入 Trigger 时的 MagicZone State。接下来,还要设置离开 Trigger 时的 State。首先,我们来另外添加一个 AkState。

  9. 在 Inspector 中,单击 Add Component,然后搜索并选中 AkState

    我们可以使用 AkTriggerExit 选项来检测另一 Collider 是否离开。

  10. 在 AkState 的 Trigger On 属性中,仅选中 AkTriggerExit 一项。

  11. 在 AkState 的 State Name 属性中,展开 MagicZone,然后选中并双击 MZ1_OutsideHouse State。

    就跟 AkTriggerEnter 选项需要通过 AkTriggerEnter 脚本来检测 Player 一样,我们同样要为刚才选择的相应 Trigger On 选项添加 AkTriggerExit 脚本。

  12. 单击 Add component,然后搜索并选中 AkTriggerExit 组件。

  13. Player 游戏对象从 Hierarchy 拖到 AkTriggerExit 的 Trigger Object 属性中。

    接下来我们试下效果如何,并注意对音乐、环境声和互动声音的影响。

  14. 进入 Play 模式,跑到 Wwizard House,走进去瞧瞧。

    注意在 Wwizard House 内部时声音都发生了怎样的变化。您可以试着挥舞几下手中的宝剑,然后就会发现冒险家的语音也略微尖锐了一些。

  15. 离开 Wwizard House。

    在离开小屋之后,将不再为 Master Audio Bus 应用 Flanger 效果器,声景应该会恢复正常,冒险家在实施攻击时的语音也会变回来。由此看来,在 Player 进入或离开 Wwizard House 时,声景也会随之动态变换。最后,再次单击 Play 按钮,退出 Play 模式。

搞定!现在,在 Player 进入或离开 MusicRegion_WwizardMagicHouse 时,MusicZone State 便会随之变化。总之,我们可以利用 AkState 组件来迅速调节 State,同时结合 AkTriggerEnter 和 AkTriggerExit 脚本来准确指定要响应的游戏对象。

[备注]

我们可以按照同样的步骤来通过 AkSwitch 脚本在 Unity 中设置 Switch(切换开关)。