目次

Wwise SDK 2018.1.11
統合の詳細 - ステート

イントロダクション

ステートは、全てのゲームオブジェクトのオーディオプロパティにグローバルスケールで影響を与える変化のことです。各ステートグループごとに、現在のステートは1つのみ存在可能で、これが全てのゲームオブジェクトに共有されます。

例えば、次のようなステートグループがあるとします:

  • Weather(天候)

このグループ内には、次のような数種類のステートが存在可能です:

  • Sunny(晴れ)
  • Rainy(雨)
  • Cloudy(曇り)
  • None(なし)
Note: 各ステートグループには必ず "None" というステートを持ちます。"None" ステートは、グループの初期状態を表しており、削除することができません。"None" ステートでは、パラメータ変更の適用はされません。

ステートシステム

ステートシステムは、様々な方法で使用できるパワフルなツールです。これにより、様々なオブジェクト(サウンド、アクターミキサー、バスなど)の複数パラメータを一度に変更可能です。単一コマンドで、サウンドエンジンで発生しているすべての動作を変更することができます。しかし、ステートには汎用性がありながら、すべての状況にとって最適なソリューションではありません。例えば、少数オブジェクトの単一パラメータを迅速に更新する必要があるような場合があるとします。このようなケースでは、RTPC 使用のほうが、ステート使用よりリソース消費が少なく、より迅速に操作できます。

ステートシステムの使用

SDKからステートを設定するには、次のコードを呼び出せばよいだけです:

AK::SoundEngine::SetState( L"Weather", L"Sunny" );

または

AK::SoundEngine::SetState( AK::STATES::WEATHER::GROUP, AK::STATES::WEATHER::STATE::SUNNY );

ステートの識別

SDK からステートを設定する方法は2通りあります:文字列の使用(Unicode または ANSI)または ID の使用。

文字列を使用すると、コードが読みやすくなるので、開発中、または、文字列を通常使用する環境で作業する場合に適しています。ID を使用すると、ランタイム時における Wwise による名前のハッシュ処理を避けることができます。

ID 使用の有効化

ID で作業するには、Wwise の Generate SoundBanks(サウンドバンク生成)ダイアログボックスの "Generate header file(ヘッダファイル生成)" オプションを選択します。Wwise_IDs.h という名前の定義ファイルには、すべての必要な ID が含まれています。この定義ファイルは、バンクが生成されるたびに更新されます。

ヘッダファイルの統合例は、統合の詳細 - バンク をご覧ください。

Caution: IDで作業する場合、新しいバンクの生成時に、.h ファイルを最新の状態に保っておくことが大切です。さもなければ、ID の不整合および/またはコンパイルエラーが発生する可能性があります。

Wwise でのバンク生成に関する詳細は、Wwise Help を参照してください。

ステートの駆動

ステートの駆動方法には2通りあります:SDKの AK::SoundEngine::SetState() 関数、および、Wwiseで生成される "SetState" アクション。しかし、両方を一度に同じステートで使用すると問題が生じやすくなります。例えば、オーディオ開発者が SDKの AK::SoundEngine::SetState() 関数を使用してステートを駆動している時に、サウンドデザイナーが作成中のイベント内に SetState アクションを導入すると、ステートの制御が困難になる可能性があります。サウンドデザイナーとオーディオ開発者が、各ステートグループまたはプロジェクト全体の現在のステートの駆動方法を一緒に決定することを強くお勧めします。どのようにステートが変化するかに関する合意がある場合は、両方の方法を一度に使用することができます。例えば、オーディオ開発者は、SDK の SetState() 関数を使用して、ステートを初期化することが可能ですが、ゲームの残り部分では、ステートをイベントによって駆動させるようにする必要があります。

Tip: 多数のサウンドに対してステートの動作が同じである場合、各サウンドでステートを複製する代わりに、これらのサウンドに共通の親(アクターミキサーなど)を持たせ、そこでステート設定をすることができます。これにより、サウンドデザイナーは、設定の編集をより迅速に行うことができます。また、ステートパラメータが多数の場所でなく1つの場所に格納されるので、これらを格納するのに必要とされるメモリ量も減らすことができます。

ステートのトランジション

ステートの変化がトリガーされる時に、トランジションが定義されている場合、Parameter Value A(パラメータ値A)から Parameter Value B(パラメータ値B)へのトランジションが始まります。デフォルトのトランジションタイムがすべてのパラメータに適用されます。トランジションタイムは、Wwise で定義可能です。

トランジションタイムが 0(つまり、トランジションタイムが全く無い)に設定されていると、トランジションが無く、パラメータ値がターゲット値に直接ジャンプします。トランジションの存在が、ゲームのサウンドを向上させないなら、トランジションを 0 に設定し、トランジションリソースを節約するべきです。

先のステートのトランジション中に、2番目のステート変化がトリガーされると、新しいパラメータが新ターゲットを定義し、パラメータは、新しいトランジションタイムを使用して現在の値から新しいターゲット値へとトランジットします。トランジションが中断されると、現在の値は前の値へトランジットします。例えば、State 1 へのステート変化が State 1 から State 2 へのトランジションに割り込むと、値は新しいトランジションタイムを使用して、現在の設定から State 1 の設定へ戻ります。

SoundEngineStates_TransitionInterruption.gif

ステートのトランジションタイムは、ブール型のパラメータ、および、ステート駆動のスイッチコンテナでは無視されます。スイッチコンテナは、ステートまたはスイッチ変化への発生事項を駆動する独自のオプションを持ちます。

ステートの統合例については、 ステート統合例 をご覧ください。

参照
概念:ステート, 統合の詳細 - ゲームオブジェクト, 統合の詳細 - スイッチ, AK::SoundEngine::SetState()