まずユーザーは、環境を表すAuxバスをWwiseプロジェクト内に作成しなければなりません、1環境ごとにAuxバスが1つ必要です。この機能を使用するサウンドに対して、"Use game-defined auxiliary sends(ゲーム定義Auxセンドを使用)"オプションが、オブジェクトのプロパティや、プロパティの継承元であるオブジェクトで設定されていなければなりません。これらのパラメータセットをゲームで使用するには、当該のエフェクトがサウンドエンジンに登録されている必要があります。これは、以下の例で示すように、他のエフェクトプラグイン登録(詳細は、プラグイン統合例 参照)と同様の方法で行います:
#include <AK/SoundEngine/Common/AkSoundEngine.h> // Sound Engine #include <AK/Plugin/AkRoomVerbFXFactory.h> // Effect initialization functions (...) AK::InitAkRoomVerbFX(AK::SoundEngine::GetGlobalPluginContext());
リンク時に初期化関数が検出されるようにするには、C++ プロジェクトが適切なプラグインライブラリとリンクしている必要があります。ライブラリに関する詳細は、SDKに含まれるライブラリとヘッダファイルの概要 をご覧ください。
// In this example we hardcode the 3 values for Dry, Hangar, and Tunnel. In // a game you would compute these values based on the game object's position // in its environment. AkReal32 nDryRatio = 0.5f; AkReal32 nHangarRatio = 0.25f; AkReal32 nTunnelRatio = 0.25f; AkAuxSendValue aEnvs[2]; aEnvs[0].listenerID = AK_INVALID_GAME_OBJECT; // SetDefaultListeners APIで割り当てられたリスナーと同じセットを使用します。 aEnvs[0].auxBusID = AK::SoundEngine::GetIDFromString( L"Hangar" ); aEnvs[0].fControlValue = nHangarRatio; aEnvs[1].listenerID = AK_INVALID_GAME_OBJECT; // SetDefaultListeners APIで割り当てられたリスナーと同じセットを使用します。 aEnvs[1].auxBusID = AK::SoundEngine::GetIDFromString( L"Tunnel" ); aEnvs[1].fControlValue = nTunnelRatio; AK::SoundEngine::SetGameObjectOutputBusVolume( GAME_OBJECT_ID_HUMAN, nDryRatio ); AK::SoundEngine::SetGameObjectAuxSendValues( GAME_OBJECT_ID_HUMAN, aEnvs, 2 );
これらの比率の意味については、 統合の詳細 - 環境とゲーム定義Auxセンド を参照してください。
|
Note: AK::SoundEngine::GetIDFromString() に渡される名前は、Wwise で定義されている Aux バスの名前です。詳細は、IDまたは文字列の使用(UnicodeまたはANSI) を参照してください。 |
サンプルプログラムでは、"Environments: Footsteps" グループの最初の3つのスライダを動かし、Dry、Hangar および Tunnel それぞれの環境の比率を設定して(左の0から右の100まで)、Environments(環境)を試してみることができます。
詳細は、統合の詳細 - 環境とゲーム定義Auxセンド を、サンプルプロジェクトは、Integration Demoサンプル を参照してください。
オブストラクションとオクルージョンは、環境やゲームオブジェクトとリスナーの位置に依存するため、各リスナーに対するゲームオブジェクトごとに計算します。
ここに示すように、オブストラクションとオクルージョンの設定は、AKSoundEngine::SetObjectObstructionAndOcclusion() を呼び出すことによって実行可能です:
// In this example we use hardcoded values for obstruction and occlusion. In a game you need // to compute these values based on the position of the game object and the listener, and // the composition of their environments. AkReal32 fObstruction = 0.05f; AkReal32 fOcclusion = 0.0f; // In this case we compute and set the values for Listener 0 only. If you have multiple listeners, // the values must be computed and set for each listener independently. AK::SoundEngine::SetObjectObstructionAndOcclusion( GAME_OBJECT_ID_HUMAN, 0 /*listener*/, fObstruction, fOcclusion );
サンプルプログラムでは、"Environments: Footsteps" グループの最後の2つのスライダを動かし、Obstruction と Occlusion の比率を設定して(0から100まで)、オブストラクションとオクルージョンを試してみることができます。
詳細は、 環境におけるオブストラクションとオクルージョン を、サンプルプロジェクトは、Integration Demoサンプル を参照してください。
|
Note: このサンプルコードは、サンプル セクションにある Sound Engine Integration Sample Project(サウンドエンジン統合サンプルプロジェクト)に由来しています。詳細は、Integration Demoサンプル をご覧ください。 |