MRが楽しい

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

MRTKv2.xを使ってMetaQuest3向けのUnityプロジェクト作成を行う その30(コントローラのボタンタッチや押下を検知する)

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

前提条件

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

コントローラのボタンタッチや押下を検知する

Questのコントローラではボタンの押下だけでなくボタンに指が触れているかどうかも検知することが可能です。
ボタンのタッチや押下を検知するにはMetaXRSDK内のOVRInputを参照します。
developers.meta.com

// returns true if the primary button (typically “A”) is currently pressed.
// Aボタンが現在押下されている場合にTrueを返す
OVRInput.Get(OVRInput.Button.One);

// returns true if the secondary gamepad button, typically “B”, is currently touched by the user.
// Bボタンに現在ユーザが振れている場合にTrueを返す
OVRInput.Get(OVRInput.Touch.Two);

サンプルスクリプト

Aボタンのタッチと押下状態を受け取り、その結果をテキスト表示する以下のサンプルスクリプトを作成しました。

using TMPro;
using UnityEngine;

public class ControllerButtonChecker : MonoBehaviour
{
    [SerializeField]
    private TMP_Text textComponent;
    
    void Update()
    {
        // コントローラのAボタンが押されたかどうかを取得
        bool isAButtonPressed = OVRInput.Get(OVRInput.RawButton.A);
        // コントローラのAボタンに指が振れているかどうかを取得
        bool isAButtonTouched = OVRInput.Get(OVRInput.RawTouch.A);
        
        // テキストに表示
        textComponent.text = $"isAButtonPressed: {isAButtonPressed}\nisAButtonTouched: {isAButtonTouched}";
    }
}

サンプルスクリプトをシーンに設定して準備は完了です。

ビルドと動作確認

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

MetaQuest3でデプロイしたアプリを起動します。
コントローラのAボタンに触れていない状態ではどちらの状態もFalseが返ります。

コントローラのAボタンに指が振れるとタッチ状態が常にTrueで返ります。押下状態は変わらずFalseが返ります。

コントローラのAボタンを押下しているとタッチと押下状態の両方が常にTrueで返ります。