Wwise SDK 2019.1.11
|
Motion(モーション)は、コントロールインターフェースのハプティックフィードバックをユーザーがコントロールするための機能です。Wwiseでは、アプリケーションのオーディオを管理するために使用するのと同じ機能セットでモーションを管理できます。Wwiseにとって、モーションデータもオーディオデータも同じです。つまり、オーディオ用に提供された機能は、全てモーションでも使えます。Wwiseモーション機能を使って利用できるハプティックフィードバックは、2種類あります。プロジェクトのオーディオシグナルを使ってモーションに変換するか、Motion Generatorソースを使って専用のモーションシグナルを生成します。この機能は、対応するコントローラがあれば、WindowsのWwiseオーサリングツール上で直接テストできます。
Motion機能は、Wwiseサウンドエンジンのプラグインシステムによってアプリケーション内で作動しますが、2つのモジュールに分けることができ、それがMotion Generatorというオーディオソースと、Wwise Motionというオーディオデバイスです。Motion Generatorはオプションですが、正確で柔軟なモーションデザインを作成するための、高い性能のツールです。
Motionシンクプラグインは、サウンドエンジンとモーション対応のデバイスの間のリンクとして考えることができます。ほかのシンクプラグインと同様に、リスナーのセットからデータを受信して、このデータをデバイスに「見せる」役割を担います。このプラグインは別のライブラリの中にあり、オーサリングツールとアプリケーションの両方に入れる必要があります。詳細は、 ファイルロケーションの解決 のセクションを参照してください。
Motion Generatorソースプラグインは、ハプティックフィードバック用のエフェクト動作をデザインするための、非常に便利で正確な方法です。ほかのオーディオソースと同様に、Motion GeneratorをWwiseプロジェクトのSound SFXノードに追加すれば、カーブ形状のハプティックフィードバックを生成できます。Sound SFXノードに、モーション対応バスに設定されたアウトプットバスがあることを確認してください。
あなたのアプリケーションでモーションを使うには、全てのコンポーネントを正しく設定する必要があります。なお、オーディオワークフローに該当するコンセプトは、全てモーションにも該当します。同じバス、リスナー、エミッタを利用します( リスナーの統合 を参照)。
デバイスにサウンドデータやモーションデータを送信するには、ライセンス取得済みのWwise MotionシェアセットをWwiseプロジェクトのAudio Deviceフォルダに追加します。Audio Deviceフォルダは、Project ExplorerのShareSetsタブにあります。Wwise Motionシェアセットは、サウンドエンジンがモーション対応デバイスとのインターフェースとして利用するAudio Deviceプラグインです。Wwise Motionシェアセットを最上位のオーディオバスにアサインすることも、重要です。モーションバスという用語は、簡略化すると、Wwise Motion ShareSetをアサインした最上位のオーディオバスのことです。プロジェクトでモーションバス階層を1つだけ設定する習慣にすると、トラブルシューティングやモニタリングのときに便利です。これで、どのSound SFXのOutput Busでも、モーションバスに設定して、ハプティックフィードバックを作成できます。一般的に、モーションバスを使用するSound SFXエレメントは、Motion Generatorソースも使用します。オーディオとモーションを同時に使うには、サウンドSFXに少なくともモーションバスが1つと、アウトプットバスまたはAuxバスのオーディオバスが1つ、必要です。
ゲーム側では、まず別のライブラリである AkMotionSink
とのリンクを確実に設定します。このライブラリは、対応プラットフォームの標準コントローラのサポートを提供します。また、 SDK\include\AK\pluginの下にある、AkMotionSinkFactory.hファイルも、含める必要があります。このファイルを含めることでプラグインが自動的に登録されるので、非常に重要です。
![]() |
注釈: Unityは、プラグインライブラリを自動的に管理します。マニュアルで AkMotionSink を追加する必要がありません。 |
対応するコントローラ一覧と追加要件については、下表を参照してください。
プラットフォーム | デバイス | 追加要件 | ||||
Android | バイブレーション対応のAndroidデバイス | |||||
iOS | 非対応。iOSデバイスの様々なハプティックフィードバックAPIは、Apple®の仕様制限のため、AudiokineticのMotion機能対応の要件を満たしていません。 | |||||
Linux | 非対応。 | |||||
Mac | 非対応。 | |||||
PlayStation 4 | DUALSHOCK 4 PlayStation Move |
|||||
Switch | Joy-Con | |||||
Windows | Xbox One コントローラー Xbox 360コントローラー DirectInput コントローラー |
XInput.lib Dinput8.lib Winmm.lib |
||||
UWP | UWP Gamepad | C++/CX | ||||
XboxOne | XboxOneコントローラ | IGamepadオブジェクトに保存されたIDを使用。 | XboxOne | XDK | XboxOneコントローラ | IGamepadオブジェクトに保存されたIDを使用。 |
XboxOne | GDK | AK/SoundEngine/Platforms/GX/AkGXSoundEngine.h の AK::SoundEngine::GetGameInputDeviceID() を使用。 |
あなたのアプリケーションでモーションを使うデバイスごとに、専用アウトプットを追加する必要があります。例えば、分割画面のゲームで4人のプレイヤーが参加する場合、コントローラでハプティックフィードバックを受信するには、4つのアウトプットを追加する必要があります。アウトプットデバイスを追加するには、Wwise APIファンクションの AK::SoundEngine::AddOutput
を使い、シェアセット名(Wwiseプロジェクトで設定済み)を、 AkOutputSettings
パラメータで指定します。さらに、複数のデバイスを接続することもあるので、デバイスIDを提供する必要があります。デバイスIDの詳細については、下表を参照してください。1つのコントローラを使うときの設定を簡単にするために、デフォルトデバイスIDがあります。"0"を使うと、Motionシンクが、モーション対応の最初の接続済みデバイスをターゲットにします。
プラットフォーム | デバイス | 情報 |
Android | バイブレーション対応のAndroidデバイス | 0を使います。 |
iOS | 非対応。 | - |
Linux | 非対応。 | - |
Mac | 非対応。 | - |
Windows | XboxOne controller Xbox360コントローラ |
0から3までのプレイヤインデックスを使います。 |
Windows | DirectInputコントローラ | DIDEVICEINSTANCEに保存されたguidProductを使います。guidProductをハッシュするには、 AK::FNVHash32を使います。 |
UWP | UWP ゲームパッド | RGamepadレファレンスのIDを取得するには、 AK::GetDeviceIDFromGamepad をコールします。 |
PlayStation 4 | DUALSHOCK 4 | scePadOpen、またはscePadGetHandleが返すデバイスのハンドルを使います。 |
PlayStation 4 | PlayStation Move | scePadOpen、またはscePadGetHandleが返却したデバイスのハンドルを使います。 |
XboxOne | XboxOne コントローラー | IGamepadオブジェクトに保存されたIDを使います。 |
Switch | Joy-Con | 希望するインデックスのnn::hid::NpadIdを使います。 |
なお、ゲームコントローラーは物理的に切断されたり、接続問題で切断されたりすることがあります。リソースを無駄に使用していない限り、これがサウンドエンジンに悪影響を及ぼすことはありません。デバイスが長時間、接続が切れた状態だと考えられる場合は、 AK::SoundEngine::RemoveOutput
をコールして、対応する AddOutput()ファンクションコールが返却するAkOutputDeviceIDを提供してください。これでリソースが解放されます。
モーションアウトプットは、ほかのセカンダリアウトプットと同じで、制約事項や要件も同じです。作成中のゲームがシングルプレイヤーで、ローカルでゲームをコントロールしているプレイヤーが1人だけの場合は、Listener/Game Object の設定が非常に簡単です。通常は新しいモーションアウトプットに、メインのオーディオアウトプットと同じデフォルトのリスナーを再利用します。つまり、シングルプレイヤー設定でリスナーを管理する必要はほとんどありません。
マルチプレイヤーゲームの場合はモーションアウトプット1つに対して、Listener/Game Objectを1つ作成する必要があります。それぞれのプレイヤーが、自分のゲーム状況によって、自分用のハプティックフィードバックのミックスをもつために必要なのです。デバイスに関連付けられたリスナーの初期化を、アウトプットが AK::SoundEngine::AddOutput()
で初期化されるのと同時に行う必要があります。特定のリスナーがあれば、サウンドやモーションのルーティングのレイヤが1つ増えます。特定のプレイヤーのListenerに限定して関連付けられているGame Objectに対してEventを再生する場合は、そのプレイヤーをターゲットとすることができます。関連付けは、 AK::SoundEngine::SetListenersをコールして行います。リスナーやゲームオブジェクトの詳細は、
リスナーの統合 を参照してください。なお、同じゲームオブジェクトに複数のリスナーを関連付けることもでき、その結果、全てのリスナーに対するブロードキャスト(配信)のような効果となります。
![]() |
注釈: エミッタがリスナーとしてモーションアウトプットに設定されている場合も、サウンドをモーションバス階層にルーティングする必要があります。 |
以下は、モーションが使えるようにアプリケーションを設定する方法について、例を通して説明します。また、SDKサンプルに含まれるIntegration Demo (DemoMotion.cpp) のDemo Motionも参照してください。全ての対応プラットフォーム用に、それぞれ動かせるデモを提供しています。
最初に一般的なプラグイン管理のルールとして、ほかのプラグインと同様に、該当するファイルを含めて、ライブラリにリンクする必要があります。(Wwiseネイティブデプロイメントに限った設定です。Unityでは不要です。)
次に、あなたがWwiseプロジェクトで指定したMotion ShareSet名を使って追加アウトプットを追加しますが、今回の名前は"Wwise_Motion"です。最初に接続されたゲームコントローラを使いたいので、アウトプットIDは0にします。
次に、通常通りにEventを再生します。Wwiseプロジェクト内で、"Play_Explosion" Eventがポイントするのは、"Wwise_Motion"シェアセットをAudio DeviceにアサインしてあるバスにルーティングされたサウンドSFXです。
念のための確認ですが、マルチプレイヤーゲームとは、「同じコンソールで複数のプレイヤー」を意味するのであって、「ネットワーク接続のマルチプレイヤーゲーム」ではありません。マルチプレイヤーのシナリオで、モーションなど、そのプレイヤー専用のアウトプットのミックスは、プレイヤーのゲーム内の視点を表現できるように、変える必要があります。そのためには、プレイヤーごとのリスナーが必要です。
次に、プレイヤー別にそれぞれアウトプットを追加します。複数のシェアセットは不要で、どのシェアセットでも何回も使えます。コントローラ別に、本当のデバイスIDを提供する必要があります。これは、Windowsで、Xboxコントローラのレイです。それぞれのプラットフォームでデバイスIDを取得する方法については、 ゲームのセットアップ の表を参照してください。
次に、通常通りにEventを再生します。Wwiseプロジェクト内で、"Play_GunFire" Eventがポイントするのは、"Wwise_Motion" ShareSetをAudio DeviceにアサインしてあるバスにルーティングされたサウンドSFXです。
複数のデバイスに影響するEventを再生するには、新しいGame Objectを設定して、それぞれのプレイヤーのListenerがそれを聞くように、設定する必要があります。
また、IntegrationDemoサンプルの中の DemoMotion
クラスも、参照してください。マルチレイヤ設定の例を提供しています。
特定のデバイスが、1つのデバイスでモーションを受信するには以下を実行する必要があります:
AkMotionSink
ライブラリにリンクして、AkMotionSinkライブラリにリンクしてください。AK::SoundEngine::RegisterGameObj
を使って作成します。Ak::SoundEngine::AddOutputをコールします。マルチプレイヤーの場合は、それぞれのプレイヤー用にリスナーオブジェクトを提供します。
WwiseプロジェクトでMotionを使うには
問題のトラブルシューティングをする場合は、あなたのアプリケーションをプロファイリングすることを推奨します。オーサリングツール内でアプリケーションをプロファイリングするには、接続してから、Profilerレイアウト(F6)を開きます。問題の根源を理解するために、役立つツールがいくつかあります。Capture Logビューで、赤字で表示されるエラーコードを確認できます。Graphビューで、サウンドエンジンのパイプラインのイメージ図を確認できます。パイプラインの最後に、モーションデバイスが表示されるはずです。なければ、指定したデバイスをサウンドエンジンが見つけられなかったということです。Emitter/Listenerタブも、非常に便利なビューです。エミッタとリスナーのペアが、全て表示されます。モーションエフェクトが作動しない場合は、あなたがモーションデバイスに指定したリスナーが、エミッタに関連付いていない可能性があります。
Motionエフェクトをトリガーしても実行されない場合は、以下を行います:
AddOutput
をコールしたときにエラーが表示されます。RegisterGameObj
、 SetListeners、そして
AddOutput
へ出したコールを確認してください。Androidデバイスの場合は忘れずに、アプリケーションのAndroidManifest.xmlファイルに、パーミッションを以下の通りに追加してください: