MRが楽しい

MRやVRについて学習したことを書き残す

MRTKv2.xを使ってMetaQuest3向けのUnityプロジェクト作成を行う その8(コントローラのボタン押下時のアクションを設定する)

本日はMetaQuest3の技術調査枠です。
MRTKv2.xを使ってMetaQuest3向けのUnityプロジェクト作成を行う手順を記事にします。
本記事はコントローラのボタン押下時のアクションを設定する手順です。

前提条件

以下の記事で作成した Unity プロジェクトを基に設定を行います。
記事その1~その4までの作業を実施済みであることが前提になります。
bluebirdofoz.hatenablog.com

コントローラのボタンを利用する

コントローラのボタンを利用するには以下の作業が必要になります。
・Digital 属性の InputAction を作成する
・OculusTouchHandController のボタン設定に作成した InputAction を割り当てる
・InputActionHandler コンポーネントでイベントを検知してアクションを実行する

Digital属性のInputActionを作成する

Profileをクローンして編集可能な状態にします。
MRTKのProfileを開き、[Input -> Input Action]パネルの[InputActionProfile]まで[Clone]して編集可能な状態にします。

[Add a New Action]ボタンをクリックして新規InputActionを作成します。

適当な名前を設定し、右側のプルダウンからアクションの属性を[Digital]に設定します。

これで新規 InputAction の作成は完了です。

OculusTouchHandControllerのボタン設定に作成したInputActionを割り当てる

次にコントローラのボタンにInputActionを割り当てます。
[Controllers]パネル内の[ControllerMappingProfile]を[Clone]して編集可能な状態にします。

[Oculus Touch Left/Right hand Controller]の設定がMetaQuest3のコントローラのマッピング設定です。
今回は右手のコントローラのAボタンを利用したいので[Oculus Touch Right hand Controller]を開きます。

AボタンのPressのプルダウンを開き、先ほど作成したInputActionを選択します。
これで右手のコントローラのAボタンを押下したときにInputActionのイベントが発生するようになります。

InputActionHandlerコンポーネントでイベントを検知してアクションを実行する

最後にInputActionのイベントを検知して実際の処理を行う設定を作成します。
適当なゲームオブジェクトに[InputActionHandler]コンポーネントを設定します。

[IsFocusRequired]のチェックを外し、[InputAction]に作成したInputActionを選択します。
これでInputActionのイベントを本コンポーネントがいつでも検知するようになります。

イベント検知時に行う処理を[OnInputActionStarted]に定義します。
テキストの入力フィールドに文字列を設定するイベントを設定しました。

UnityEditorでのテスト

UnityEditorでInputActionの動作テストを行いたい場合はSpeechCommandのキーコードを利用すると指定のキーボード入力でInputActionを呼び出しできるので便利です。
[Speech]パネル内の[SpeechCommandsProfile]を[Clone]して編集可能な状態にします。

[Add a New Speech Command]で音声コマンドを追加します。
先ほど作成したInputActionを呼び出す音声コマンドを作成して[KeyCode]に任意のキーボードキーを割り当てます。今回はF1キーに割り当てました。

シーンを再生して動作を確認します。
F1キーを押下するとInputActionが発火し、これを受けとってテキストの入力フィールドに文字列を設定するイベントが処理されることを確認できました。

ビルドと動作確認

以下の記事を参考にプロジェクトのビルドとQuest3へのデプロイを実行してください。
bluebirdofoz.hatenablog.com

MetaQuest3でデプロイしたアプリを起動し、右手コントローラの A ボタンを押します。

以下の通り、テキストフィールドに文字列が入力されました。