此方法适用于以下情形:
游戏或其音频/振动内容可以分成多个部分。
此方法非常适用于单人游戏,在单人游戏中,所有可能用到的声音和振动都只是由玩家在游戏中的当前位置决定的。 通过将内容分割成多个 SoundBank,管理内存的效率比第一种方法更高,同时仍可轻松地将音频和振动集成到游戏中。
首先,必须确定如何划分 SoundBank。例如,可以按以下方式划分 SoundBank:
一个通用 SoundBank,其中包含在游戏任何时刻都可能发生的所有 Event。此 SoundBank 将一直保持载入内存。
每个关卡或环境配备一个 SoundBank。根据主人公实际位置变化而需要用到的声音和振动。
以及一些额外 SoundBank,具体取决于特定游戏的需求。
在 Wwise 中创建多个完整 SoundBank 的方法是:
创建游戏所需的多个 SoundBank,并正确地为它们命名,例如“CommonEvent”、“Level_1”、“Level_2”和“Level_3”。
在 Wwise 中将多个 Event 集中到虚拟文件夹中。为每个 SoundBank 创建一个虚拟文件夹,然后将各个虚拟文件夹拖到相应的 SoundBank 中去。通过将虚拟文件夹添加到 SoundBank,您可以避免在每次向工程中添加新 Event 时都要修改 SoundBank 的内容。 当虚拟文件夹的内容发生变化时,SoundBank 将自动更新。
将所有 Event 添加到各自的 SoundBank。只有在添加原始文件夹之外的 Event 时(如果有的话)才需要此步骤。如果多个 SoundBank 中需要某个 Event,则只需将它添加到必需的 SoundBank 即可。
生成 SoundBank,并将生成的 SoundBank 文件夹复制到游戏应用程序。
将多个完整的 SoundBank 集成到游戏中的方法是:
在游戏中,只需在正确的时间加载正确的 SoundBank 即可。例如,游戏可以在开始时加载通用 SoundBank,然后在游戏中根据玩家的实际位置加载其它 SoundBank。注意,某些游戏需要具有足够的内存,以便一次加载多个“关卡”,实现关卡之间的过渡。
以下代码示例可以让您了解到在游戏中如何加载这些 SoundBank。
//在此初始化声音引擎。 ... // 加载初始化库和通用 SoundBank。 AkBankID bankID; // 本例中没有使用。 AKRESULT eResult = AK::SoundEngine::LoadBank( L"Init.bnk", AK_DEFAULT_POOL_ID, bankID ); if ( eResult == AK_Success ) { eResult = AK::SoundEngine::LoadBank( L"MyAllInONeBank.bnk", AK_DEFAULT_POOL_ID, bankID ); } ... // 在代码的多个位置,取决于实际需要: eResult = AK::SoundEngine::LoadBank( L"Level_1.bnk", AK_DEFAULT_POOL_ID, bankID ); ... eResult = AK::SoundEngine::LoadBank( L"Level_2.bnk", AK_DEFAULT_POOL_ID, bankID ); ... eResult = AK::SoundEngine::LoadBank( L"Level_3.bnk", AK_DEFAULT_POOL_ID, bankID ); ... eResult = AK::SoundEngine::LoadBank( L"Level_1.bnk" ); ... eResult = AK::SoundEngine::LoadBank( L"Level_2.bnk" ); ... eResult = AK::SoundEngine::LoadBank( L"Level_3.bnk" );
注意 | |
---|---|
作为 LoadBank() 命令的替代方法,您可以使用 AkBankContent_All 命令来做 Prepare SoundBank。对 SoundBank 做 Prepare 的优点是避免内存中可能出现媒体重复。请参阅 Wwise SDK 文档中的“Prepare SoundBank”一节。 |