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


menu_open

メソッドNo.3: メディアのマイクロマネジメント

このメソッドは、以下の場合に適しています。

  • ゲームのメモリに保存するアセットが、大量にある。

  • サウンドデザイナーが、ゲームのメディア要件を事前に予測するのが困難である。

  • あるイベント用に再生するサウンドやを決めるのに、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(一般足音バンク)」: どこでも発生する足音(床板、コンクリートなど)用のメディアを入れたバンク。

メディアをマイクロマネージ(細かく分別)するSoundBankを、Wwiseで作成する

例えば、ゲームに3種類の地面があるとします(雪、砂、コンクリート)。Wwiseでは、Switch Containerを1つ設定して、Switch「ground_texture(地面素材)」に従い、3つのRandom Containerの1つを、再生します。3つのRandom Containerには、指定された地面の足音サウンドとして、それぞれに4種類のサウンドが入っています。

メディアをマイクロマネージ(細かく分別)するSoundBankを、Wwiseで作成するには:

  1. “EventBank”というSoundBankを1つ作成して、SoundBank Editorにロードする。

  2. イベント“Play_Footstep”を、SoundBank Editorの、Addタブにドラッグする。

  3. 本イベントのMedia列のチェックボックスを外し、Events列とStructures列のチェックボックスは、選択したままにする。

  4. 3種類の地面素材に対して、SoundBankを1つずつ作成する。

  5. 3つのSoundBankに、それぞれの地面素材に関連するRandom Containerを、1つずつドラッグして入れる。

    info 注記

    3つのRandom Containerをドラッグ&ドロップする代わりに、個々のサウンドをドラッグ&ドロップして入れることもできます。ただし、コンテナを使うと、コンテナの中身が変更されても、コンテナ内のサウンドが全て自動的にSoundBankに追加され、マニュアル操作で変更点を修正しなくて済む、というメリットがあります。

  6. 地面素材の3つのSoundBankは、それぞれEvents列とStructures列のチェックボックスを外し、Media列のチェックボックスだけを、選択したままにする。

  7. これらのSoundBankを生成して、生成されたSoundBankフォルダを、ゲームアプリケーションにコピーする。

    この時点で、バンクは合計4つあり、最初のSoundBankの中に、再生するオーディオに関するイベント(Event)データと構造(Structure)データがあり、それ以外の3つのSoundBankには、それぞれ1つの地面素材に関連するメディア(Media)だけが入っている。

マイクロマネージ戦略に基づき、ゲームにSoundBankを実装するには:

  1. ゲーム中に、共通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をいつロードするのかを判断するには、サウンドデザイナーとゲーム開発者の間で緊密な連絡が必要となる。


このページはお役に立ちましたか?

サポートは必要ですか?

ご質問や問題、ご不明点はございますか?お気軽にお問い合わせください。

サポートページをご確認ください

あなたのプロジェクトについて教えてください。ご不明な点はありませんか。

プロジェクトを登録していただくことで、ご利用開始のサポートをいたします。

Wwiseからはじめよう