目录
在开始学习本节课程之前,请务必先完成前面的“利用 Trigger 加载 SoundBank”章节。 |
通常,我们会按照序列、情节或关卡拆分游戏内容,以此合理地构建游戏结构;《Wwise Adventure Game》也不例外。目前,在进入 Woodlands Trigger 游戏对象时,将会加载 Woodlands SoundBank。
这种方式对有些游戏来说特别适用,而且设置起来也非常方便。不过,为此我们必须确保不会在加载 Woodlands SoundBank 之前发送 SoundBank(音频包)中包含的任何 Event(事件)。另外,还有一种方式可以实现类似的结果:从场景来加载包含与该场景有关的所有 Event 的 SoundBank。这样便于高效地管理与 SoundBank 相关的素材。因为 Awake 和 Start 函数是根据所在场景的初始化来调用的,所以我们可以使用这些 Trigger On 选项来确保按照正确的顺序加载素材。
而且,这样做还有一个好处:在 Unity 中卸载场景时,将会停止其所包含的所有 Event。因此,通过只在对应场景中包含 Woodlands(林地)专有内容,可确保随着区域 SoundBank(音频包)的加载和卸载来开始和停止所有与该 SoundBank 相关的 Event。另外,还可自由地将 Unity 游戏对象(如敌人和风车)添加到场景中,以便更加高效地管理游戏的内存和 CPU 用量。有关如何添加多个 Unity 场景的详细信息,请参阅 Unity 文档。
接下来,我们将创建新的 Woodlands 场景,并为其添加 AkBank 组件,然后加载该场景。
-
在 Project 视图中,选中 Scenes 文件夹,接着在右侧窗格中右键单击空白区域,然后转到 Create 并选择 Scene。
在选择 Scene 后,将高亮显示新添加的 Scene 文件的名称以便重命名。
-
将其命名为 Woodlands。
通常,我们可以直接在 Project 窗口中双击并打开场景。不过,因为 L3_1 - Loading SoundBanks using Triggers 和 Woodlands 场景都要加载,所以我们需要将其拖到 Hierarchy 中以便同时打开两个场景。
-
将 Woodlands 场景拖到 Hierarchy 中。
在创建空白场景时,会在其中包含一些默认的游戏对象,如镜头和灯光。因为 L3_1 - Loading SoundBanks using Triggers 场景是主场景,所以我们会使用它的 Main Camera 和 Directional Light。为此,我们将从 Woodlands 场景中移除这些对象。
-
选中 Woodlands 场景中的所有游戏对象,然后右键单击并选择 Delete。
接下来,我们创建一个新的游戏对象,并将其用于加载 SoundBank。
-
右键单击 Woodlands 场景的标题,然后转到 GameObject 并选择 Create Empty。
-
将其命名为 Wwise。
在 L3_1 - Loading SoundBanks using Triggers 场景中,我们会看到前面“利用 Trigger 加载 SoundBank”中创建的 Woodlands Trigger 游戏对象。在此,我们要找到它的 AkBank 组件,并将其用在 Woodlands 场景中。
-
在 L3_1 - Loading SoundBanks using Triggers 场景中,选中 Woodlands Trigger 游戏对象。
在 Inspector 中,我们会看到用来加载 Woodlands SoundBank 的 AkBank 组件。
-
单击并按住 AkBank 标题栏,然后将其拖到 Woodlands 场景中的 Wwise 游戏对象上。
此时会从 Woodlands Trigger 游戏对象中移除 AkBank(包括属性设置),并将其添加到 Wwise 游戏对象。
-
在 Woodlands 场景中,选中 Wwise 游戏对象。
我们注意到,现在将 AkBank 组件添加到了 Wwise 游戏对象。
接下来,我们要修改 Load On 属性。在进入 Woodlands Trigger 时,将会加载整个 Woodlands 场景。因此,不是在 AkTriggerEnter 时加载 SoundBank,而是在 Woodlands 场景 Awake 时加载。
-
在 Load On 属性中,仅选中 Awake 一项。
在从运行时移除场景时,应同时卸载 SoundBank。为此,我们来将 Unload On 属性设为 Destroy(场景的卸载和移除时机)。
-
在 Unload On 属性中,仅选中 Destroy 一项。
我们不需要在 Woodlands 场景中执行任何其他修改,所以可以移除该场景,以便直接通过 L3_1 - Loading SoundBanks using Triggers 场景来加载。首先,我们来保存场景。
-
右键单击 Woodlands 场景,然后选择 Save Scene。
在保存场景后,Woodlands 名称旁边的星号将会消失。接下来,我们还要从 Hierarchy 中移除场景,以便直接通过 LoadSceneAsyncOnEnter 脚本来加载。假如不将其移除,将会重复加载此场景。
-
再次右键单击,然后选择 Remove Scene。
Hierarchy 中不再显示 Woodlands 场景,但仍可在 Project 视图中找到。接下来,我们将使用 LoadSceneAsyncOnEnter 脚本来动态加载场景。如此一来,在 Player 进入 Woodlands Trigger 时,场景便会重新出现在 Hierarchy 中,同时会加载 Woodlands SoundBank。LoadSceneAsyncOnEnter 脚本为自定义脚本,用于在加载场景前检测 AkAudioListener (Main Camera) 是否进入了 Trigger。
-
选中 Woodlands Trigger 游戏对象。
-
在 Inspector 中,单击 Add Component,然后搜索并选中 LoadSceneAsyncOnEnter。
我们注意到,LoadSceneAsyncOnEnter 底部显示了一条警告消息:WARNING: No Scene name!。
脚本会自动搜索 Build Settings 中添加的场景,并查找与此字段中文本匹配的场景。因为现在字符串是空的,所以才会显示警告消息。
Build Settings 设置用于构建游戏的编译版本。一旦进入 Play 模式,游戏便会通过该设置查找要加载的其他场景。只有位于 Unity 工程中的场景才能被添加到 Build Settings 中。
-
在 Scene to Load 属性中,键入 Woodlands。
此时,将会显示一条新的警告消息。为了在运行时加载 Hierarchy 中没有的场景,我们需要将其添加到 Build Settings。这样 Play 模式才能获知这些场景。
-
在 Unity 菜单栏中,转到 File,然后选择 Build Settings。
-
将 Woodlands 场景从 Project 视图拖到 Scenes in Build 列表中。
在将场景添加到列表中时,只要不放在最上面就行。因为,在构建游戏的编译版本时要将最上面的场景用作 Main 场景。确保不再显示警告消息,否则请检查拼写错误。现在,我们对 Woodlands Trigger 进行了修改并加载了场景。
-
关闭 Build Settings 窗口,然后单击 Play 按钮。
-
跑到 Woodlands。
我们注意到,现在 Hierarchy 中加载了 Woodlands 场景。
-
跑出 Woodlands Trigger,然后进入 Village(村庄)。
我们注意到,Hierarchy 中卸载了 Woodlands 场景。接下来,我们可以将对象添加到 Woodlands 场景,以便在进入 Trigger 时加载 SoundBank 声音以及树木、瀑布等各种游戏对象。
-
按下 ESC 打开《WAG》游戏菜单,然后再次单击 Play 按钮退出 Play 模式。