このメソッドは、以下の場合に適しています。
ゲーム、つまりゲームのオーディオコンテンツやモーションコンテンツを、複数のセクションに分割できる。
このメソッドは、シングルプレイヤーゲームなど、可能性のある全てのサウンドやモーションが、ゲーム中のプレイヤーの現在地のみで決まるゲームに適しています。 コンテンツを複数のSoundBankに分けることで、メソッドNo.1より効率的にメモりを管理できる上に、オーディオやモーションを比較的簡単にゲームに実装できます。
まず最初に、SoundBankの分割方法を決めます。例えば、以下のようにSoundBankを分割することができます。
1つの汎用SoundBankに、ゲーム中に発生する可能性がある、全てのイベントを入れる。このSoundBankは、常にメモリにロードされている。
レベルごとにSoundBankを1つ、または環境ごとにバンクを1つ、設定する。メインキャラクターの現在地によって変わるサウンドやモーションを入れる。
さらに、ゲームの独自要件に基づいて、他のSoundBankをいくつか用意しても良い。
Wwiseで、コンプリートな(全てそろった)SoundBankを複数、作成するには:
ゲームに必要なSoundBankを作成して、例えば、 「CommonEvents(共通イベント)」「Level_1」「Level_2”」「Level_3」などそれぞれに適切な名前を付ける。
Wwiseで、イベントを、複数の仮想フォルダに分ける。1つのSoundBankに対して、1つの仮想フォルダを作成して、各仮想フォルダを該当するSoundBankにドラッグする。サウンドバンクに仮想フォルダを追加することで、プロジェクトに新しいイベントが追加されても、その都度サウンドバンクのコンテンツを編集する必要がない。 仮想フォルダの中身に変更があれば、そのSoundBankが自動的に更新される。
全てのイベントを、適切なSoundBankに追加する。この手順は、元のフォルダにないイベントがあれば、それを追加するための手順である。あるイベントを複数のSoundBankに入れる必要があれば、必要な全てのSoundBankにそのイベントを追加すれば良い。
これらのSoundBankを生成して、生成されたSoundBankフォルダを、ゲームアプリケーションにコピーする。
複数のコンプリートなSoundBankを、ゲームに実装するには:
ゲーム中に、適切なタイミングで適切なSoundBankをロードすれば良い。例えば、ゲームの最初に汎用SoundBank(General SoundBank)をロードして、他のSoundBankは、プレイヤーのゲーム中の実際の位置に基づいて、ロードできる。なお、ゲームによっては、レベル間のトランジションのために、複数のレベルを同時にロードするので、多くのメモリが必要なものもある。
このようなSoundBankをゲームにロードする方法として、以下のサンプルコードを参照。
// Initialize the sound engine here. ... // Load the Init bank and the Common SoundBank. AkBankID bankID; // Not used in this sample. 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 ); } ... // And at various places in the code, based on the actual needs: 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コマンドを使ってSoundBankをプリペア(用意)することもできます。SoundBankをプリペアすることのメリットは、メモリに入っているメディアの重複を避けられることです。Wwise SDKドキュメンテーションの「Preparing Banks」セクションを参照してください。 |
Multiple Complete SoundBankを利用するメリットとデメリットを下表に示します。
メリット |
デメリット |
---|---|
"All-in-one" SoundBankのテクニックより、メモリ使用量が大幅に削減される可能性がある。 ゲームに簡単に実装できる。 |
オンラインゲームや、イベントベースのゲームなど、オーディオ要件やモーション要件が、メインキャラクターの現在地などの単純な事実以外で変わるゲームには、適していない。 重複したデータがSoundBankに入っていれば、メモリにロードされたメディアファイルが重複する可能性がある。 異なるSoundBankに似たようなコンテンツが入っていることがあるので、ディスク上のSoundBankの合計スペースが、増える可能性がある。 |