使用Wwise バージョン
arrow_right 目次
警告: このページでは、一部の保護された情報が表示されません。
あなたが特定プラットフォームのライセンスを所有しているユーザーであれば、最初にログインしてください。

Wwiseモーションの統合

Wwiseでは、ゲームのオーディオを管理するために使用するのと同じ機能セットを使用してモーションの管理も可能です。つまり、オーディオデータの処理に使用するあらゆる操作を、同じAPIを使用して、モーションデータに対しても利用可能であるということです。現在、コンソールゲームコントローラーのみがモーションエンジンでサポートされています。

Note.gif

Note: モーションは、Mac® および iOSプラットフォームでは利用できません。

ゲームで使用するデバイスの登録

サウンドエンジンでモーションデバイスをデフォルトで使用することはできません。各デバイスごとに、個別ライブラリへゲームがリンクされている必要があります。以下の表をご覧ください:

デバイス ライブラリ ID コールバック
ゲームコントローラ AkRumble.lib AKMOTIONDEVICEID_RUMBLE AkCreateRumblePlugin

ゲーム側で AK::MotionEngine::RegisterMotionDevice 呼び出しにより、モーションエンジンのデバイスを登録する必要があります。ゲームで使用されるデバイスタイプごとにこのコールを実行する必要があります。ゲームが複数デバイスをサポートするものの、ゲームが実行される特定のハードウェアセットアップにこれらのデバイスがインストールされていない場合は、無駄にデバイスを登録することを避けてください。これは、デバイスがインストールされているかどうかをテストする方法ではありません。

プレイヤーの初期化

モーションエンジンは、複数プレイヤーおよびプレイヤーごとの複数デバイスをサポートしています。例えば、分割画面の Xbox360 ゲームは、同じコンソール上に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">
  • 名前は Wwise アプリケーションの “Add Source(ソースを追加)”メニューで表示される名前です。
  • CompanyID は、貴社 ID です。0 は Audiokinetic 社用にリザーブされています。
  • PluginID は、貴社プラグイン ID です。ここでは、任意の ID を使用可能です。
  • DataType は、次のいずれかである必要があります:TypePositionSamples、TypeSpeedSamples、TypeAccelSamples。これは、プラグインからどんな種類のサンプルが出力されるかを指定し、互換性のないデバイスがサポートしないデータを受信しないようにします。ランブルパッドは、スピードサンプルをサポートします。

チェックリストとトラブルシューティング

特定のプレイヤーが、1つのデバイスでモーションを受信するには以下を実行する必要があります:

  • AK::MotionEngine::RegisterMotionDevice を1度呼び出し、使用されるデバイスをエンジンに通知。
  • 使用されるソースプラグイン(モーション、モーションジェネレータ、トーンジェネレータなど)ごとに、AKSoundEngine::RegisterPlugin を一度呼び出し。
  • プレイヤー/デバイスの組み合わせ用に、AKMotionEngine::AddPlayerMotionDevice を1度呼び出し、該当プレイヤーが特定のデバイスタイプを使用することをエンジンに通知。
  • AK::MotionEngine::SetPlayerListener を一度呼び出し、どのリスナーがプレイヤーを表すかをエンジンに通知。
  • AK::SoundEngine::SetListenerPipeline を一度呼び出し、選択したリスナーによるモーションデータ受信を有効化。
  • プレイヤーが受信しなければならないモーション信号を放出する各ゲームオブジェクトごとに、AKSoundEngine::SetActiveListeners を呼び出し。

Wwiseプロジェクト側では、次の操作が必要です:

  • Project Settings / Motion Devices タブで、デバイスを選択。
  • Master Motion Busにソースを1つルーティング。
  • ソースがロードされているバンクの一部である。

Wwiseさ作成されたモーションが特定のモーションデバイス上で再生しない場合、プロファイラ(Profiler)を使用して、問題をトラブルシュートすることができます。Advanced Profiler でモーションをキャプチャするには、次の手順で行います:

  • F6を押して、Profiler レイアウトにスイッチ。
  • メニューバーから、Project > Profiler Settings をクリック。
  • Motion Data オプションをセレクトし、OK をクリック。Motion Devices タブが Advanced Profiler に追加されます。

これで、ゲームに接続してモーションをプロファイルし、潜在的な問題を識別することができるようになります。"Motion Devices" タブには、2つの独立したリストが含まれています:Devices 用リストと Game Objects 用リスト。Devices リストは、各プレイヤー用にどのモーションデバイスが適切にサウンドエンジンに登録され初期化されているかを示します。

問題のトラブルシューティングを行うには、次のように、モーションデバイスが適切に初期化されているか確認します:

  • 各モーションデバイスが、Device リストに表示されていることを確認します。デバイスがリストに表示されていない場合は、AKMotionEngine::RegisterMotionDevice への呼び出しに失敗しています。

モーションデバイスがリストに表示されている場合は、次に、適切なプレイヤーにデバイスをマッチングさせているチェックマークを確認し、モーションデバイスが特定のプレイヤーに関連付けられているかどうかを確認します。チェックマークがない場合は、次のいずれかが当てはまる可能性があります:

モーションデバイスが正しく初期化されており、それぞれのデバイスが適切なプレイヤーに関連付けられている場合、Game Objects リストをチェックし、モーションデータを適切に特定のプレイヤーに送信できるようゲームオブジェクトが正しく設定されているかどうかを確認します。特定のゲームオブジェクト/プレイヤーの組み合わせにチェックマークがない場合、Advanced Profiler の Listeners タブに切り替えて、以下をチェックします:

  • Listeners リストで、モーションデータを受信していないプレイヤー番号を Players カラムから探し、モーションデータ受信のために該当プレイヤーがどの Listener を使用しているか確認します。プレイヤーが適切なリスナーを使用していない場合は、AKMotionEngine::SetPlayerListener への呼び出しを確認してください。
  • プレイヤーが、正しいリスナーを使用している場合、プレイヤーがアタッチされているリスナーの Motion カラムにチェックが入っていることを確認してください。 もしチェックが入ってない場合は、AKSoundEngine::SetListenerPipeline を適切に呼び出しているか確認してください。
  • チェックマークが表示されたら、Game Object リストをチェックして、プレイヤーに使用されるリスナーが、Motion FX が再生するゲームオブジェクトに対して有効になっているかどうかを確認します。リスナーが、該当ゲームオブジェクトに対して有効になっていない場合、AKSoundEngine::SetActiveListeners への呼び出しを確認してください。