Wwiseでは、ゲームのオーディオを管理するために使用するのと同じ機能セットを使用してモーションの管理も可能です。つまり、オーディオデータの処理に使用するあらゆる操作を、同じAPIを使用して、モーションデータに対しても利用可能であるということです。現在、コンソールゲームコントローラーのみがモーションエンジンでサポートされています。
|
Note: モーションは、 Mac®、iOS、 tvOS、Android の各プラットフォームでは利用できません。 |
サウンドエンジンでモーションデバイスをデフォルトで使用することはできません。各デバイスごとに、個別ライブラリへゲームがリンクされている必要があります。See the following table:
デバイス | ライブラリ | ID | コールバック |
ゲームコントローラ | AkRumble.lib | AKMOTIONDEVICEID_RUMBLE | AkCreateRumblePlugin |
デバイス | ライブラリ | ID | コールバック |
ゲームコントローラ | AkRumbleWithMove.lib Xinput.lib dinput8.lib |
AKMOTIONDEVICEID_RUMBLE | AkCreateRumblePlugin |
モーションエンジンは、複数プレイヤーおよびプレイヤーごとの複数デバイスをサポートしています。例えば、分割画面の Xbox One ゲームは、同じコンソール上に4人のプレイヤーを持つことができます。ゲーム側で各プレイヤーを登録し、彼らが各々のデバイスを介してフィードバックを受けられるようにしなければなりません。これは、AKMotionEngine::AddPlayerMotionDevice によって実行可能です。
これを、接続されている各プレイヤーおよびデバイスごとに繰り返す必要があります。コンピューターにデバイスドライバーがインストールされていないと、この関数はエラーを返します。またこれは、実際にデバイスの電源が入っているかどうかもチェックしません。ランブルに関しては、コントローラーが接続されているかのチェックは、入力デバイスが初期化される時にゲーム側でなされる必要があります。
ゲームコンソール上で、ゲームコントローラーが、物理的にまたは接続の問題のために切断されることがあります。リソースを無駄に使用していない限り、これがモーションエンジンに悪影響を及ぼすことはありません。長時間に渡ってデバイスが切断されている場合は、リソースを解放するために AK::MotionEngine::RemovePlayerMotionDevice を呼び出すことができます。
プレイヤーがコントローラーを切断し、コンソールの別のポートに再接続した場合、RemovePlayerMotionDevice を呼び出し、続いて新しいプレイヤーポートで AddPlayerMotionDevice を呼びます。
マルチプレイヤーゲームにおいて、各プレイヤーは同時に同じアクションを取らないので、各プレイヤーに受信されるフィードバックも同じであってはなりません。どのプレイヤーがどのモーションエフェクトを受けるかを管理するには、オーディオの場合と同じ次のコンセプトが使用されます:リスナーとゲームオブジェクト。モーションの場合、ゲームオブジェクトは振動を「放出」し、リスナーがこれらの振動を「受信」します。
モーションサポート付きのゲームでは、各プレイヤーが独自のリスナー(リスナーの統合 参照)を持っている必要があります。ゲーム側で、リスナーをプレイヤーに明示的にアサインします。これは、AKMotionEngine::SetPlayerListener によって実行可能です。
デフォルトでは、すべてのプレイヤーがリスナー 0を使用するようになっていることに注意してください。リスナーは、オーディオとモーションデータの両方のレシーバーとして動作するよう変更されています。しかしながら、デフォルトではリスナーはオーディオのみ受信できるようになっています。リスナーがどんな種類のデータを受信するかを指定するには、AKSoundEngine::SetListenerPipeline を呼び出します。
この設定が完了したらゲーム側で状況に応じて、各ゲームオブジェクトに適切なリスナーのビットをアクティブにすればよいだけです。これは、オーディオの場合と同様に、AKSoundEngine::SetActiveListeners を使用して実行可能です。
ただし、オーディオの場合との大きな違いが1つあります。オーディオでは、サウンドが3Dポジショニングに設定されている場合のみリスナーが動作します。モーションの場合は異なります。モーションの場合、モーションデバイスで感知されるすべてのフィードバックに対してリスナーとゲームオブジェクトの設定が必須になります。
現在、Wwiseには次のモーションソースプラグインが搭載されています:
名前 | ライブラリ | ID (AKSOURCEID_...) | コールバック | デバイス |
モーションジェネレータ | AkMotionGenerator | _MOTIONGENERATOR | AkCreateMotionGenerator | ゲームコントローラ |
モーションソースプラグインを使用するには、他のソースプラグインの場合と同様に、AKSoundEngine::RegisterSource を使用して登録します。
モーションデバイス用ソースプラグイン記述は、オーディオ用プラグイン記述と非常に類似しています。詳細は、オーディオプラグインのセクションを参照してください(オーディオプラグイン)。
オーディオソースプラグインとモーションソースプラグインの間には、2つの違いがあります。まず、AKWwise::IMotionSourcePlugin インターフェースがプラグインにサポートされている必要があります。これは、 AKWwise::IAudioPlugin に由来するので、オーディオプラグインに関連するすべてのサービスや制限が適用されます(オーディオプラグイン Wwiseオーサリング 部分の記述 参照)。2つ目の違いは、プラグインのプロパティを定義するのに必要とされるxmlファイルです。ほとんどのファイルは、通常のオーディオソースに必要なものと同一ですが(Wwiseプラグイン XML 記述ファイル 参照)、モーションプラグインは次のように宣言される必要があります:
<FeedbackSourcePlugin Name="Wwise Motion Generator" CompanyID="0" PluginID="405" DataType="TypeSpeedSamples">
特定のプレイヤーが、1つのデバイスでモーションを受信するには以下を実行する必要があります:
AK::InitAkMotionGenerator
、Tone GeneratorのAK::InitAkToneSource
など) 。AK::MotionEngine::SetPlayerListener
を一度呼び出し、どのリスナーがプレイヤーを表すかをエンジンに通知。AK::SoundEngine::SetListenerPipeline
を一度呼び出し、選択したリスナーによるモーションデータ受信を有効化。AK::SoundEngine::SetListeners
を呼び出し。Wwiseプロジェクト側では、次の操作が必要です:
Wwiseさ作成されたモーションが特定のモーションデバイス上で再生しない場合、プロファイラ(Profiler)を使用して、問題をトラブルシュートすることができます。Advanced Profiler でモーションをキャプチャするには、次の手順で行います:
これで、ゲームに接続してモーションをプロファイルし、潜在的な問題を識別することができるようになります。"Motion Devices" タブには、2つの独立したリストが含まれています:Devices 用リストと Game Objects 用リスト。Devices リストは、各プレイヤー用にどのモーションデバイスが適切にサウンドエンジンに登録され初期化されているかを示します。
問題のトラブルシューティングを行うには、次のように、モーションデバイスが適切に初期化されているか確認します:
モーションデバイスがリストに表示されている場合は、次に、適切なプレイヤーにデバイスをマッチングさせているチェックマークを確認し、モーションデバイスが特定のプレイヤーに関連付けられているかどうかを確認します。チェックマークがない場合は、次のいずれかが当てはまる可能性があります:
モーションデバイスが正しく初期化されており、それぞれのデバイスが適切なプレイヤーに関連付けられている場合、Game Objects リストをチェックし、モーションデータを適切に特定のプレイヤーに送信できるようゲームオブジェクトが正しく設定されているかどうかを確認します。特定のゲームオブジェクト/プレイヤーの組み合わせにチェックマークがない場合、Advanced Profiler の Listeners タブに切り替えて、以下をチェックします: