menu
バージョン
2017.2.10.6745
2024.1.1.8691
2023.1.9.8628
2022.1.18.8567
2021.1.14.8108
2019.2.15.7667
2019.1.11.7296
2018.1.11.6987
2017.2.10.6745
2017.1.9.6501
2016.2.6.6153
2015.1.9.5624
2024.1.1.8691
2023.1.9.8628
2022.1.18.8567
2021.1.14.8108
2019.2.15.7667
2019.1.11.7296
2018.1.11.6987
2017.2.10.6745
2017.1.9.6501
2016.2.6.6153
2015.1.9.5624
このメソッドは、以下の場合に適しています。
ゲームのメモリに保存するアセットが、大量にある。
サウンドデザイナーが、ゲームのメディア要件を事前に予測するのが困難である。
あるイベント用に再生するサウンドやを決めるのに、SwitchやStateを活用するプロジェクトである。
サウンドを、定義されたセクションに簡単に分割することができない。
中には非常に複雑なゲームもあり、サウンドやモーションをトリガーする時に様々な要因が関与し、例えば、ゲームに出てくる素材、ゲーム内の時間、ゲームオブジェクトの動き、さらにオンラインマルチプレイヤーゲームの場合は、他のプレイヤー達のアクションまでもが、関係することもあります。 イベントベース、またはオブジェクトベースの環境では、サウンドをロードするタイミングを、他のゲームオブジェクトとの距離関係に基づいて決めることができます。 例えば、ロードする複数のSoundBankのリストを、ゲームオブジェクトごとに設定して、そのゲームオブジェクトが一定の範囲内にある時、または単にゲーム中で存在する時に、これらのSoundBankをロードするのも、1つの方法です。
また、SwitchやStateによって、再生するオブジェクトが変わります。オブジェクトを再生させるイベントを、SoundBankに追加する時に、再生される可能性のある全てのメディアも自動的に追加されます。例えば、「Play_Footstep(足音を再生)」という1つのイベントがあるとします。Switchの切り替えによって現在の地面素材が指定され、これに基づいてイベントが適切なサウンドを再生します。この方法は確実ですが、例えば、ゲームプレイがロンドンのビルの中で進行しているのに、「footstep_sand.wav(砂の足音)」や「footstep_winter.wav(冬の足音)」などのサウンドをメモリに入れておくことは、無駄になりかねません。
この場合、メモリを無駄使いしないために、1つのSoundBankにイベント構造やオブジェクト構造を追加して、次に、各SoundBankにどのオブジェクトをいれるのかを指定します。例えば、様々な地面の上の足音の例を考えて見ましょう。この場合、以下のSoundBankを作成します。
「EventBank(イベントバンク)」: 「Play_Footstep」のイベントと構造を入れたバンク。
「Winter_Footstep_bank(冬の足音バンク)」: ゲームの一部(冬)だけで発生する足音用のメディアを入れたバンク。
「Desert_Footstep_bank(砂漠の足音バンク)」: ゲームの一部(砂漠)だけで発生する足音用のメディアを入れたバンク。
「Common_Footstep_bank(一般足音バンク)」: どこでも発生する足音(床板、コンクリートなど)用のメディアを入れたバンク。
例えば、ゲームに3種類の地面があるとします(雪、砂、コンクリート)。Wwiseでは、Switch Containerを1つ設定して、Switch「ground_texture(地面素材)」に従い、3つのRandom Containerの1つを、再生します。3つのRandom Containerには、指定された地面の足音サウンドとして、それぞれに4種類のサウンドが入っています。
メディアをマイクロマネージ(細かく分別)するSoundBankを、Wwiseで作成するには:
“EventBank”というSoundBankを1つ作成して、SoundBank Editorにロードする。
イベント“Play_Footstep”を、SoundBank Editorの、Addタブにドラッグする。
本イベントのMedia列のチェックボックスを外し、Events列とStructures列のチェックボックスは、選択したままにする。
3種類の地面素材に対して、SoundBankを1つずつ作成する。
3つのSoundBankに、それぞれの地面素材に関連するRandom Containerを、1つずつドラッグして入れる。
info | 注記 |
---|---|
3つのRandom Containerをドラッグ&ドロップする代わりに、個々のサウンドをドラッグ&ドロップして入れることもできます。ただし、コンテナを使うと、コンテナの中身が変更されても、コンテナ内のサウンドが全て自動的にSoundBankに追加され、マニュアル操作で変更点を修正しなくて済む、というメリットがあります。 |
地面素材の3つのSoundBankは、それぞれEvents列とStructures列のチェックボックスを外し、Media列のチェックボックスだけを、選択したままにする。
これらのSoundBankを生成して、生成されたSoundBankフォルダを、ゲームアプリケーションにコピーする。
この時点で、バンクは合計4つあり、最初のSoundBankの中に、再生するオーディオに関するイベント(Event)データと構造(Structure)データがあり、それ以外の3つのSoundBankには、それぞれ1つの地面素材に関連するメディア(Media)だけが入っている。
マイクロマネージ戦略に基づき、ゲームにSoundBankを実装するには:
ゲーム中に、共通SoundBankをゲームの冒頭でロードすれば、あとは、他のSoundBankを必要な時にロードするだけとなる。例えば、ゲームの始めに、イベントのSoundBankと、一般足音のSoundBankをロードすれば、その他のSoundBankは、ゲーム中のプレイヤーの実際の位置に合わせて、ロードできる。
このようなSoundBankをゲームにロードする方法として、以下のサンプルコードを参照。
// Load Init and the Eventbank. 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"Eventbank.bnk", AK_DEFAUlT_POOL_ID, bankID ); } if( eResult == AK_Success ) { eResult = AK::SoundEngine::LoadBank( L"Common_Footstep_bank.bnk", AK_DEFAULT_POOL_ID, bankID ); } ... // And at various places in the code, possibly based on the location: eResult = AK::SoundEngine::LoadBank( L"Winter_Footstep_bank.bnk", AK_DEFAULT_POOL_ID, bankID ); ... eResult = AK::SoundEngine::LoadBank( L"Desert_Footstep_bank.bnk", AK_DEFAULT_POOL_ID, bankID ); ... eResult = AK::SoundEngine::LoadBank( L"Level_3.bnk", AK_DEFAULT_POOL_ID, bankID ); ... eResult = AK::SoundEngine::UnloadBank( L"Winter_Footstep_bank.bnk" ); ... eResult = AK::SoundEngine::UnloadBank( L"Desert_Footstep_bank.bnk" );
ここでは具体的な例を1つあげましたが、このテクニックは他にも多様な使い方があります。SoundBankごとに、入れるオブジェクトやイベントを1つずつ決めるので、全てのSoundBankの中身を完全にコントロールできます。なお、ゲームの全てのオブジェクトに対して、SoundBankを1つずつ作成することもできますが、新しいサウンドやができるたびに、そのSoundBankをゲームの適切な場所でロードするために、新たなコードが必要となり、常に維持するのが非常に難しくなります。 どのゲームでも、設定の細かさと、ゲームへの実装のしやすさの間で、ちょうど良いバランスを見つけることが最終目的となります。
info | 注記 |
---|---|
サウンドを1つ1つロードする方法を検討しているのであれば、SoundBank全体をロードするのではなく、イベントのプリペア(用意)機能の方が、適しているかもしれません。イベントのプリペアについては「メソッドNo.4: アクションイベントをプリペアする」を参照してください。 |
メディアをマイクロマネージするメリットとデメリットを、下表に示します。
メリット |
デメリット |
---|---|
メモリ使用の最適化には、最も適している。 ゲーム中のどの時点に、どのメディアをロードするのかを、完全にコントロールできる。 ほかより大きくなりがちなメディアSoundBanksで、 「SoundBankの後方互換性」を確保できる。 |
どのSoundBankをいつロードするのかを判断するには、サウンドデザイナーとゲーム開発者の間で緊密な連絡が必要となる。 |