此方法适用于以下情形:
需要将媒体设为很高的粒度级别以保持较低的内存用量。
不用为管理哪些媒体素材必须指派给哪个 SoundBank 而烦恼。
什么叫预备 Action Event(动作事件)?在调用 PrepareEvent()
函数时,系统会对 Action Event 进行分析,以确保所有与此 Event 相关的结构和媒体均已加载到内存中。否则,系统会自动从磁盘流式传入缺失的信息。在明确撤消以前,Event 一直处于 Prepare 状态。
备注 | |
---|---|
只有动作 Event 可事先 Prepare。"PrepareEvent"方法不适用于对话事件。 |
此方法要求创建至少一个 SoundBank,然而结构部件可以位于与 Event 所在的同一个 SoundBank 中,也可处于完全独立的一个 SoundBank 中。
在构建使用 PrepareEvent 机制的 SoundBank 时,条件是至少在一个 SoundBank 中能够找到所需的所有 Event 和结构,而且文件系统必须能够访问这些松散媒体素材。记住,将结构划分到多个 SoundBank 中可以提高内存的管理效率。
在 Prepare 动作 Event 前,Event 本身必须(使用 LoadBank())从一个 SoundBank 加载到内存中。由于 Event 中包含在 Prepare Event 时所需的依赖项的信息,因此必须首先加载 Event 所在的 SoundBank。
备注 | |
---|---|
另外还可结合 AK::SoundEngine::PrepareBank 来 Prepare Event。使用 PrepareBank 机制的主要优势是无需将 SoundBank 划分为“Event 库”和“媒体库”。在这种方法下,所有内容包含在同一个 SoundBank 中,但是在调用 AK::SoundEngine::PrepareBank 时,只有 SoundBank 的元数据内容加载到内存。当游戏需要媒体时,您可以使用 PrepareEvent 加载媒体。 |
在 Prepare Event 时在 Wwise 中设置 SoundBank 的方法是:
创建一个名为"Event"的 SoundBank,并加载到 SoundBank Editor 中。
把工程中的一些动作事件添加到"Events" SoundBank 中,或仅添加事件工作单元。
禁用 Media 复选框,只将 Events 和 Structures 复选框保留为启用状态。在使用 PrepareEvent() 时,媒体不得位于 SoundBank 内,但可以作为松散文件直接从磁盘中加载。
备注 | |
---|---|
在本例中,所有 Event 和结构包含在一个 SoundBank 中。虽然对于小型工程,这是可以接受的,但您很可能会需要将内容拆分到多个 SoundBank。另外还可以创建独立的"Structures"SoundBank,它无需从 SDK 命令行进行显式加载或 Prepare,因为各个 Event 都包含对需要加载的其它 SoundBank 的引用。 |
生成 SoundBank,并将生成的 SoundBank 文件夹复制到游戏应用程序。
备注 | |
---|---|
单个 SoundBank 中包含的结构数据不可在运行时拆分。因此,如果您使用了 AK::SoundEngine::PrepareEvent(),并且需要来自独立 SoundBank 的结构数据,则该 SoundBank 中的所有结构将一次性加载。为此,您可能会想将工程中的结构内容拆分到多个 SoundBank 中,以便最大限度地减少加载到内存中的非必要信息的数量。 |
有关集成的详细信息,请参阅 Wwise SDK 文档中的预备 Action Event 章节。
记住,对 AK::SoundEngine::PrepareEvent()
的调用必须视为 I/O 函数调用。在上例中,我们使用了阻塞函数。您可以使用 AK::SoundEngine::PrepareEvent()
函数的其它重载来实现非阻塞调用,然后用另一个回调来响应加载完成的通知。
下表列出了“预备 Action Event”的优点和缺点。
优点 |
缺点 |
---|---|
生成 SoundBank 的过程很简单。 媒体的粒度级别很高。 内存占用总体保持在低水平。 过程自动化非常容易。 |
当逐一加载媒体素材时,可能增加磁盘上的读取和寻址次数。 对总体内存占用量的控制力减弱。 使用交互式音乐时将变得复杂。 |