Dyuichi Blog

Unityでボタンを設置して、コントローラーからのレーザーでクリックする方法 [Meta Quest Pro]

前提

すでに、UnityでMeta Quest用のアプリを開発できる環境が整っていることを前提とします。

もしできていなければ、以下を参考に環境構築してください。

動作確認環境

  • HMD: Meta Quest Pro
  • Unity Version: 2021.3.2f1
  • PC: Ubuntu 22.04

設定手順

本手順では、Oculus/VR/ScenesフォルダのControllerModelsシーンを編集し、コントローラーからのレーザーでボタンをクリックできるようにします。

手順一覧
  • ボタン
    • ボタンの作成・位置調整
    • Canvasオブジェクトの編集
    • ボタンがクリックされたときの挙動を設定
    • ボタンのコライダー設定
  • GazePointer、SelectionVisualizerオブジェクト
    • GazePointerの編集
    • SelectionVisualizerの編集
  • EventSystem
    • Input Moduleの変更
    • OVR Input Moduleの編集

ボタン
ボタンの作成・位置調整

OVRPlayerController > OVRCameraRig内に、新しくCanvas > Button オブジェクトを追加してください。

画像が読み込まれない場合はページを更新してみてください。

Buttonの位置を、Gameビューで確認しながら、好きな位置に調節してください。最初は大雑把にGameビューで確認できる位置に置いておき、細かい調節は後でVRで確認しながらやるといいかもしれません。

画像が読み込まれない場合はページを更新してみてください。

Canvasオブジェクトの編集
  • Graphic Raycasterコンポーネントのチェックを外してください。
  • OVR Raycasterコンポーネントをアタッチ
    画像が読み込まれない場合はページを更新してみてください。

    ボタンがクリックされたときの挙動を設定

    Buttonオブジェクトに、ボタンがクリックされたときの挙動を記述するためのスクリプトをアタッチしてください。今回は ButtonClick.cs という名前にしました。

    画像が読み込まれない場合はページを更新してみてください。

    ButtonClick.csの中身は以下です。ボタンがクリックされたら、シーンが切り替わるようにしています。

    c#using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    using UnityEngine.SceneManagement;
    
    public class ButtonClick : MonoBehaviour
    {
        public void OnClick()
        {
            Debug.Log("Button Clicked");
            SceneManager.LoadScene("Oculus/VR/Scenes/Cubes");
        }
    }

    次に以下のようにして、Buttonオブジェクトがクリックされたときの挙動を追加してください。

    ButtonオブジェクトにアタッチされているButtonコンポーネントに、On Click () があるので、その + ボタンを押す

    ここで作成したButtonオプジェクトを選択

    Buttonオブジェクト内の先程作成されたButtonClickスクリプトを選択

    OnClick()メソッドを選択

    画像が読み込まれない場合はページを更新してみてください。

    ボタンのコライダー設定

    ボタンがクリックされたことを判定するためにコライダーが必要なので、Box ColliderButtonオブジェクトにアタッチしてください。

    画像が読み込まれない場合はページを更新してみてください。

    GazePointer、SelectionVisualizerオブジェクト

    新しく、GazePointer(子にGazeIconを持つ)とSelectionVisualizerという名前(この名前は他のシーンと統一させるためにこうしていますが、好きに決めて大丈夫です)で、空のオブジェクトを作成してください。

    画像が読み込まれない場合はページを更新してみてください。
    GazePointerの編集

    OVR Gaze Pointerコンポーネントをアタッチ

    Ray Transformに、OVRPlayerController > OVRCameraRig > TrackingSpace > LeftHandAnchor 内のLeftControllerAnchorオブジェクト、もしくはTrackingSpace > RightHandAnchor 内のRightControllerAnchorオブジェクトをセットしてください。

    画像が読み込まれない場合はページを更新してみてください。

    SelectionVisualizerの編集
    • Line Rendererコンポーネントをアタッチ
      • OVR Pointer Visualizerコンポーネントをアタッチ

        EventSystem
        Input Moduleの変更

        以下のように、Input Moduleを変更してください。

        • HierarchyからEventSystemオブジェクトを選択 → Standard Input Module コンポーネントのチェックを外す
        • Add Componentで、OVR Input Moduleスクリプトをアタッチ

        OVR Input Moduleの編集
        • Ray Transformに、OVRPlayerController > OVRCameraRig > TrackingSpace > LeftHandAnchor 内のLeftControllerAnchorオブジェクト、もしくはTrackingSpace > RightHandAnchor 内のRightControllerAnchorオブジェクトをセットしてください。
        • Cursorに、先程作成したGazePointerオブジェクトをアタッチしてください。
        画像が読み込まれない場合はページを更新してみてください。
        • Joy Pad Click Buttonで、コントローラーのどのボタンが押されたときに、入力を受け付けるかを設定してください。コントローラーから出ているレーザーがボタンにあたっているときに、ここで設定されたコントローラーのボタンが押されると、画面上のボタンが押されたことになります。

          ビルド・実行

          PCとQuest Proを接続した状態で、File > Build And Run でビルド・実行してください。

          Quest Proで以下のように見えていればOKです。

          画像が読み込まれない場合はページを更新してみてください。

          コントローラーのレーザーがボタンに当たっている状態で、先程設定したコントローラーのボタンを押して以下のシーンに切り替わると、完璧です。

          画像が読み込まれない場合はページを更新してみてください。

          sankou