目次

Wwise SDK 2018.1.11
統合の詳細 - スイッチ

イントロダクション

スイッチは、完全な新規サウンドを必要とする、ゲームのアクションまたは環境の変化のことです。スイッチシステムの目的は次のようなものです:スイッチコンテナをゲームオブジェクトベースで駆動。

例:スイッチグループ

例えば、地面テキスチャがスイッチとして設定されている場合、足音が発生する時にどのサウンドを再生するかを決定するのは、地面テキスチャになります。

スイッチグループの例:

  • Ground(地面)

このグループ内の様々なスイッチの例:

  • Gravel(砂利)
  • Metal(金属)
  • Sand(砂)

2つの異なるキャラクターが、同一時に2つの異なる地面テキスチャ上に存在する場合、各キャラクターのスイッチのステートも異なります。

スイッチ設定

スイッチグループに現在のスイッチがない場合、スイッチグループはデフォルトのスイッチを使用します。このような状況は、ゲームの開始時、または開発中に発生する可能性があります。ゲームコードが存在しないスイッチを参照する場合も、スイッチコンテナはデフォルトのスイッチを使用します。例えば、サウンドデザイナーがスイッチを1つ削除するためにコンテナに変更を加えたにも関わらず、オーディオ開発者に知らせていない場合、このスイッチはコードに残ります。このコードがゲーム内で実行されると、これが参照するスイッチはすでに存在しないため、デフォルトのスイッチが使用されます。

スイッチの駆動

スイッチの駆動方法には、3つのオプションがあります:SDK の AK::SoundEngine::SetSwitch() メソッド、Wwise イベントで生成される "SetSwitch" アクション、または、RTPC。しかし、これらのオプションを組み合わせると問題が起こりやすくなります。例えば、サウンドデザイナーが、彼らが作成したイベント内に SetSwitch アクションを導入し、一方で、オーディオ開発者がSDK の AK::SoundEngine::SetSwitch() コマンドを使用してスイッチを駆動した場合、スイッチの制御が困難になる可能性があります。サウンドデザイナーとオーディオ開発者が、各スイッチグループごと、または、プロジェクト全体に、現在のスイッチがどのように駆動されるかについて合意しておくことを強くお勧めします。スイッチがどのように変化するかについての同意がある場合のみ、3つの方法は一緒に使用可能です。例えば、オーディオ開発者は SDK の AK::SoundEngine::SetSwitch() コマンドを使用してスイッチを初期化し、ゲームの残りの部分では、イベントによってスイッチが駆動されるようにすることができます。

AK::SoundEngine::SetSwitch() によるスイッチを設定

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

文字列を使用するとコードが読みやすくなるので、開発中の使用や通常文字列を使用する環境での使用に適しています。ID を使用すると、文字列ルックアップが回避され、文字列マッピングの格納に使用されるメモリを節約します。

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

L"Ground",
L"Gravel",
myGameObject1
);

または

AK::SWITCHES::GROUND::GROUP,
AK::SWITCHES::GROUND::SWITCH::GRAVEL,
myGameObject1
);

SetSwitch() 関数の3つ目のパラメータは、スイッチを適用する必要のあるゲームオブジェクトです。再生アクションを含むイベントが、このゲームオブジェクトの使用によりトリガーされると、スイッチコンテナで再生するものを選択するために、指定されたスイッチを使用します。 スイッチがゲームオブジェクトに対して設定されていないと、このオブジェクトはスイッチコンテナオプションで指定されたデフォルトのスイッチを使用します。

ゲームオブジェクトの登録を解除すると、このオブジェクトの現在のスイッチも消去されます。このゲームオブジェクトが後ほどまた使用される場合、このスイッチをリセットする必要があります。

更なる詳細は、 統合の詳細 - ゲームオブジェクト をご覧ください。

ID使用の有効化

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

スイッチとステートの比較

ステートグループとスイッチグループの主な違いは、スイッチはゲーム内の各ゲームオブジェクトごとに異なるということです。ステートとスイッチのもう1つの違いは、スイッチの変化は、スイッチコンテナにのみ影響を与えるということです。ステートの変化は、スイッチコンテナに影響を与えますが、さまざまな他のオブジェクト(サウンド、アクターミキサー、バスなど)のパラメータも変更します。

Tip: スイッチがゲーム内においてグローバルで、すべてのゲームオブジェクトに適用される場合、ゲームオブジェクトごとにスイッチを設定する代わりに(すでにグローバルである)ステートを使用してください。これにより、作業の手間が省け、プラットフォームメモリや処理時間を節約できます。

スイッチ統合例は、スイッチ統合例 をご覧ください。

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