版本

menu_open

方法 2:多个完整的 SoundBank

此方法适用于以下情形:

  • 游戏或其音频/振动内容可以分成多个部分。

此方法非常适用于单人游戏,在单人游戏中,所有可能用到的声音和振动都只是由玩家在游戏中的当前位置决定的。 通过将内容分割成多个 SoundBank,管理内存的效率比第一种方法更高,同时仍可轻松地将音频和振动集成到游戏中。

首先,必须确定如何划分 SoundBank。例如,可以按以下方式划分 SoundBank:

  • 一个通用 SoundBank,其中包含在游戏任何时刻都可能发生的所有 Event。此 SoundBank 将一直保持载入内存。

  • 每个关卡或环境配备一个 SoundBank。根据主人公实际位置变化而需要用到的声音和振动。

  • 以及一些额外 SoundBank,具体取决于特定游戏的需求。

在 Wwise 中创建多个完整 SoundBank 的方法是:

  1. 创建游戏所需的多个 SoundBank,并正确地为它们命名,例如“CommonEvent”、“Level_1”、“Level_2”和“Level_3”。

  2. 在 Wwise 中将多个 Event 集中到虚拟文件夹中。为每个 SoundBank 创建一个虚拟文件夹,然后将各个虚拟文件夹拖到相应的 SoundBank 中去。通过将虚拟文件夹添加到 SoundBank,您可以避免在每次向工程中添加新 Event 时都要修改 SoundBank 的内容。 当虚拟文件夹的内容发生变化时,SoundBank 将自动更新。

  3. 将所有 Event 添加到各自的 SoundBank。只有在添加原始文件夹之外的 Event 时(如果有的话)才需要此步骤。如果多个 SoundBank 中需要某个 Event,则只需将它添加到必需的 SoundBank 即可。

  4. 生成 SoundBank,并将生成的 SoundBank 文件夹复制到游戏应用程序。

将多个完整的 SoundBank 集成到游戏中的方法是:

  1. 在游戏中,只需在正确的时间加载正确的 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”一节。

有关此方法的补充说明

下表列举了“一体化”SoundBank 方法的优点和缺点。

优点

缺点

需要的内存比“一体化”SoundBank 技术少得多。

非常易于集成到游戏中。

不太适合在线游戏或基于 Event 的游戏,在这些游戏中,音频或振动需求不仅仅由主人公的位置等简单因素来驱动。

由于 SoundBank 中可能包含重复数据,因此可能导致内存中重复加载某些媒体文件。

由于不同的 SoundBank 可能含有相似的内容,因此可能增大 SoundBank 的总体磁盘占用空间。


此页面对您是否有帮助?

需要技术支持?

仍有疑问?或者问题?需要更多信息?欢迎联系我们,我们可以提供帮助!

查看我们的“技术支持”页面

介绍一下自己的项目。我们会竭力为您提供帮助。

来注册自己的项目,我们帮您快速入门,不带任何附加条件!

开始 Wwise 之旅