バージョン

menu_open
Wwise SDK 2021.1.14
統合の詳細 - State(ステート)

イントロダクション

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

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

  • Weather(天候)

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

  • Sunny(晴れ)
  • Rainy(雨)
  • Cloudy(曇り)
  • None(なし)
注釈: 各ステートグループには必ず "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 が含まれています。この定義ファイルは、バンクが生成されるたびに更新されます。

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

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

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

ステートの駆動

ステートを動かすには2つの方法があり、SDKの AK::SoundEngine::SetState() 関数か、Wwiseで生成するアクションである "SetState" を使います。しかし、両方を一度に同じステートで使用すると問題が生じやすくなります。例えば、サウンドデザイナーがEventを作成してその中にSetStateのActionを取り入れる一方、オーディオプログラマーがSDKの AK::SoundEngine::SetState()SetState 関数を使いStateを動かすとしたら、Stateをコントロールしにくい事態となるかもしれません。サウンドデザイナーとオーディオプログラマーが、各ステートグループのステート、またはプロジェクト全体の現在のステートの決め方を一緒に決定することを強くお勧めします。どのようにStateを変化させるのかが、合意できていれば、両方の手段を同時に使用しても問題ありません。例えばStateの初期化にはオーディオプログラマーがSDKの SetState() 関数を使い、ゲームのそれ以外の部分では、EventでStateを動かせるように残しておくことができます。

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

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

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

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

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

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

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

参照
概念:State(ステート), 統合の詳細 - ゲームオブジェクト, 統合の詳細 - Switch(スイッチ), AK::SoundEngine::SetState()
AKSOUNDENGINE_API AKRESULT SetState(AkStateGroupID in_stateGroup, AkStateID in_state)

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

サポートは必要ですか?

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

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

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

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

Wwiseからはじめよう