第 2 课

目录

使用 Multi Position 模式

通常,我们可以利用模块化对象(如 Prefab)来将各种类型的信息保存到一起,以此最大限度地减少 Unity 中的冗余数据。就拿 Torch Prefab 来说。它包含了用来描述对象位置、外观和行为的各种组件。在将 AkAmbient 组件添加到 Prefab 后,只要将 Torch(火把)游戏对象添加到场景中就会包含 Torch 声音。当然,我们可以通过 AkEvent 或 AkAmbient 脚本来实现这一点。不过,最好的做法是将 AkAmbient 的 Position Type 设为 MultiPosition 模式。就跟 AkEvent 和 AkAmbient 的 Simple 模式一样,我们可以利用此模式来播放与游戏对象关联的 Event(事件)。更重要的是,在 MultiPosition 模式下,无论将多少 AkAmbient 组件添加到关卡中,都只会生成一个 Event 实例。

接下来,我们将把 AkAmbient 组件添加到 301_Torch Prefab。刚开始将 AkAmbient 设为 Simple 模式,然后再改为 MultiPosition 模式,以此对比下声部实例数的差异。

  1. 确保目前仍在 AkAmbient Position Types 场景中。

    为了熟悉 Torch 声音,我们先在地牢中试听一下。与此同时,连接 Profiler(性能分析器),看下与游戏中 Torch 数量(17 个)对应的当前声部实例数。

  2. 在 Wwise 的工具栏中,单击 Remote…(远程...)。

  3. 选中 Wwise Adventure Game (Editor),然后单击 Connect(连接)。

  4. 在 Unity 中,单击 Play 按钮进入 Play 模式。

  5. 按下 ESC 进入游戏菜单,然后传送到 Dungeon(地牢)。

  6. 跑着穿过走廊,仔细听下火把声。

    我们注意到,所有 Torch 声音都直接定位在了 Torch 游戏对象上。也就是说,每次从火把旁边经过时声音都会随着距离增大和减小。

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

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

    接下来,我们通过在 Filter(筛选器)中指派 Ambient_Torch Event 来专门监控该事件。

  9. 在 Performance Monitor(性能监控器)中,往回拖动时间光标,直到 Voice Inspector(声部检视器)中显示 301_Torch。

    下面来看下 Voice Inspector 最左侧的面板。此面板会依据 Voice Monitor 中捕获的信息列出所有活跃的游戏对象和关联的声部。我们注意到,当前有 10 多个使用 Ambient_Torch Event 的声部。接下来,我们将定位类型设为 MultiPosition 模式,来察看一下有何变化。

  10. 切换回 Unity,然后在 Hierarchy 中搜索 Torch 并选中 301_Torch_01 游戏对象。

    在 Hierarchy 中的游戏对象显示为蓝色时,表示其引用 Prefab 素材。Prefab 是游戏对象的模板。在将 Prefab 拖到场景中时,将会创建跟 Prefab 完全相同的游戏对象。以后只要修改 Prefab,就会将所作更改自动应用于由该 Prefab 生成的任何游戏对象上。为了对 Prefab 进行更改,您可以在 Project 视图中将其选中,然后在 Inspector 中执行所需更改。不过,也可在场景中对 Prefab 的游戏对象实施更改,然后将这些更改发送到 Prefab。接下来,我们修改 301_Torch_01 游戏对象上的 AkAmbient,然后将其应用于原始的 Prefab。

    [技巧]

    如需进一步了解 Prefab,请访问 https://docs.unity3d.com/Manual/Prefabs.html 页面。

  11. 在 Position Type 属性中,选择 Multi Position_Mode

    接下来,我们要将这些更改发送到原始的 Prefab。为此,需要应用游戏对象上执行了更改的组件。

  12. 在 Inspector 中,单击“齿轮”图标,然后依次选择 Modified Component > Apply to Prefab '301_Torch',来将所作属性更改发送到 Prefab。

    现在,我们将针对 301_Torch_01 游戏对象所作的修改保存到了 301_Torch Prefab 中。如此一来,所有其他 Torch 游戏对象都会沿用相同的属性。

  13. 在 Wwise 中,单击 Reconnect(重新连接)。

  14. 在 Unity 中,单击 Play 按钮进入 Play 模式。

  15. 在游戏菜单中,传送到 Dungeon

  16. 跑到地牢入口走廊中,然后再返回,仔细听下火把声。

    我们注意到,Torch 声音仍然定位在对应的 Torch 游戏对象上,听起来跟同时播放多个 AkEvent 声部时一样。

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

切换回 Wwise,我们注意到 Voice Inspector 最左侧面板中的 Event 实例数从很多个减到了只剩 1 个,而且呈现的音频输出效果并没有变化。在 Voice Inspector 最右侧的面板中,会显示各个火把的 Distance Attenuation。

在此之后,无论将多少火把添加到 Dungeon 中,实例数始终都将保持为 1。因为,我们针对添加到场景中的所有 Prefab 应用了 MultiPosition 模式。正因如此,MultiPosition 模式特别适合与关卡设计师协作。因为将声音嵌入到了对象中,所以无论将其放置或移动到哪里,都不会增加音频占用的资源。

[备注]

记住,MultiPosition 模式只使用一个实例,所以每个声音位置播放的都是相同的声部。在这种情况下,将无法通过 Randomizer 来让声音随着位置不断变换。