コントローラーインプットとトラッキングのスタートガイド
更新日時: 2024/09/04
コントローラーインプットとトラッキングは、XRアプリにとって最も基本的なインプットフォーマットです。それによりユーザーは、使い慣れたインターフェイスを使って仮想ワールドとの複雑なインタラクションを実行することができます。このガイドでは、Unrealエンジンのプロジェクトで基本的なコントローラーインプットとトラッキングを利用可能な状態にする方法を示します。その後、コントローラーインプットとトラッキングを使って、ワールド内のオブジェクトとの基本的なインタラクションを実装する方法を示します。
このガイドを完了すると、次のことができるようになります。
- Questコントローラーの処理をUnreal Engineプロジェクトに追加する。
- コントローラーのトリガーを通じてユーザーインプットを受け取る。
- ユーザーがコントローラーのサムスティックを押した時点でインプットを受け取る。
- ハプティックフィードバックを提供する。
- コントローラーの位置と回転情報(6DOF)を受け取る。
このガイドでは、Unrealエンジン用Meta XRプラグインを利用しています。これは、Unreal Marketplaceから入手可能です。先に進む前に、このプラグインがインストール済みであることを確認してください。
独自の機能を追加するには、カスタムのフレームワーククラスをいくつか作成して設定し、デフォルトの代わりにそのクラスを使うようにアプリを設定する必要があります。
[コンテンツドロワー]で、*ゲームモードベースを親クラスとして、Blueprintクラスアセットを新たに作成します。新しいアセットに、実際の用途に適した名前を付けます。この例では、ControllerGameModeという名前にしています。
[コンテンツドロワー]で、*ポーンを親クラスとして、Blueprintクラスアセットを新たに作成します。新しいアセットに、実際の用途に適した名前を付けます。この例では、ControllerPawnという名前にしています。
[ウィンドウ]メニューで[ワールドの設定]を選択します。新しい[ゲームモード]アセットを[GameModeオーバーライド]プロパティに割り当てることにより、該当するゲームモードがアプリ実行時に使われるようにします。
[コンテンツドロワー]で、[ゲームモード]アセットをダブルクリックして編集用に開きます。[Blueprintエディター]ツールバーで、[クラスのデフォルト]がまだ選択されていなければクリックします。新しいポーンアセットを[デフォルトポーンクラス]プロパティに代入することにより、自分のゲームモードで自分のポーンクラスが使われるようにします。
ユーザーからのインプットを受け入れるには、ハードウェアインプットをフレームワークを通じて渡すためのマッピングを設定する必要があります。
[コンテンツドロワー]で、新しいインプットアクションアセットを追加します。これは、右コントローラーの[A]ボタンを押す動作用なので、それに応じた名前を指定します。この例では、XR_R_A_InputActionという名前にしています。
- アクセス対象となるその他すべてのインプットについてこの処理を繰り返します。このガイドでは、最低でも[A]ボタンを押した場合のインプットアクションと、グリップ軸が必要です。軸インプットのためのインプットアクションを追加する場合は、アセットをダブルクリックし、[値の型]プロパティに適切な型を設定する必要があります。
[コンテンツドロワー]で、新しい[インプットマッピングコンテキスト]アセットを追加し、それに適切な名前を指定します。この例では、XRInputMappingContextという名前にしています。
[インプットマッピングコンテキスト]アセットをダブルクリックして編集し、インプットアクションごとにMappings配列に項目を追加して、それぞれを対応するインプットに関連付けます。
コントローラートラッキングは、カスタムポーンクラスで実行されます。コントローラーデータにアクセスしたり、コントローラーをワールド内で視覚化したりできるようにするため、特化したコンポーネントをこのクラスに追加する必要があります。
- [コンテンツドロワー]で、ポーンアセットをダブルクリックして編集用に開きます。
[コンポーネント]パネルで、DefaultSceneRootコンポーネントの下にモーションコントローラーコンポーネントを新たに追加します。新しいコンポーネントの名前として、LeftMotionControllerを指定します。
- LeftMotionControllerコンポーネントが選択されている状態で、[詳細]パネルで[モーションソース]プロパティを[左]に設定します。
[Components (コンポーネント)]パネルで、DefaultSceneRootコンポーネントの下にMotion Controller (モーションコントローラー)コンポーネントを新たに追加します。新しいコンポーネントの名前として、RightMotionControllerを指定します。
- RightMotionControllerコンポーネントが選択されている状態で、[詳細]パネルで[モーションソース]プロパティを[右]に設定します。
[コンポーネント]パネルで、LeftMotionControllerコンポーネントの下にOculusXRControllerコンポーネントを新たに追加します。コンポーネントの名前としてLeftOculusXRControllerを指定します。
- LeftOculusXRControllerコンポーネントが選択されている状態で、[詳細]パネルで[骨格タイプ]プロパティを[左]に設定します。
[コンポーネント]パネルで、RightMotionControllerコンポーネントの下にOculusXRControllerコンポーネントを新たに追加します。コンポーネントの名前としてRightOculusXRControllerを指定します。
- LeftOculusXRControllerコンポーネントが選択されている状態で、[詳細]パネルで[骨格タイプ]プロパティを[右]に設定します。
[コンポーネント]パネルで、DefaultSceneRootコンポーネントの下にカメラコンポーネントを新たに追加します。コンポーネントの名前として、VRCameraを指定します。
トラッキングとインプットを機能させるには、トラッキングスペースを設定し、以前に作成した入力マッピングコンテキストをプレイヤーに関連付ける必要があります。
[イベントグラフ]で、[プレイ開始]イベントの横を右クリックし、[ヘッドマウンスディスプレイが有効]を選択します。
[ヘッドマウンスディスプレイが有効]ノードのアウトプットピンをドラッグして引き出し、[ブランチ]を選択します。
- [プレイ開始]イベントのアウトプットexecピンからの接続を、Branchノードのインプットexecピンまでドラッグします。
Branchノードのアウトプットexecピンをドラッグして引き出し、[トラッキングの原点を設定]を選択します。
- [トラッキング原点を設定]機能で、[原点]ピン値を[ローカルフロア]に設定します。
[トラッキング原点を設定]機能の後ろを右クリックし、[プレイヤーのコントローラーを取得]を選択します。
[プレイヤーのコントローラーを取得]ノードのアウトプットピンをドラッグして引き出し、[EnhancedInputLocalPlayerSubsystemを取得]を選択します。
[拡張インプットローカルプレイヤーサブシステム]ノードをドラッグして引き出し、[マッピングコンテキストを追加]を選択します。
[マッピングコンテキストを追加]機能で、[マッピングコンテキスト]ピン値を、前に作成した[インプットマッピングコンテキスト]アセットを参照するように設定します。
- [トラッキング原点を設定]機能のアウトプットexecピンから、[マッピングコンテキストを追加]機能のインプットexecピンまで接続をドラッグします。
完成した[プレイ開始]イベントネットワークは、次のようになります。
Tickイベントを使って、フレームごとのコントローラートラッキングデータにアクセスしたり、保管したりします。保管したデータは、ほかの場所で使うことができます。その際には、そのデータにアクセスするためのロジックを何度も実行する必要がないので、開発時には時間の節約になり、実行時の効率も上がります。
[マイBlueprint]パネルの[コンポーネント]セクションにあるRightOculusXRControllerコンポーネントを、[ティック]イベントの横にある[イベントグラフ]までドラッグします。[RightOculusXRControllerを取得]を選択します。
RightOculusXRControllerノードのアウトプットピンをドラッグして引き出し、[Get Motion Controller Data]を選択します。
Get Motion Controller Data関数で、[Hand (手)]ピン値を[Right (右)]に設定します。
- Tickイベントのアウトプットexecピンから、Get Motion Controller Data関数のインプットexecピンまでドラッグしてつなげます。
Get Motion Controller Data関数の[Motion Controller Data (モーションコントローラーデータ)]アウトプットピンをドラッグして引き出し、[Promote to Variable (変数に昇格)]を選択します。
[マイBlueprint]パネルの[Variables (変数)]セクションで、新しい変数の名前としてRight Motion Controller Dataを指定します。
Setノードのアウトプットピンをドラッグして引き出し、[Break XRMotionControllerData]を選択します。
- [XRMotionControllerDataを破棄]ノードの下矢印をクリックして、アウトプットピンをすべて公開します。
[設定]ノードのアウトプットexecピンをドラッグして引き出し、[文字列の出力]を選択します。
[XRMotionControllerDataを破棄]ノードの[照準位置]アウトプットピンから、[文字列を出力]機能の[入力文字列]インプットピンまで接続をドラッグします。
- [Blueprintエディター]ツールバーの[コンパイル]ボタンをクリックして、ポーンクラスをコンパイルします。[保存]ボタンをクリックして、アセットを保存します。
- レベルを自分のデバイス上で実行して、画面に出力されるコントローラーの位置を確認します。
コントローラーを動かすと、コントローラーの位置が画面にアウトプットされます。
この機能の初歩的な内容について理解できたら、以下のガイドに進みましょう。