見出し画像

Magic Leap2 の コントローラ シンプルな実装方法

はじめに

この記事は、Magic Leap2 Advent Calendar 2022 の22日目です。
Magic Leap2 コントローラ のシンプルな実装方法について説明します。


OnePlanet XR について

https://1planet.co.jp/xrconsulting.html

このブログ記事は OnePlanet XR によるものです。
OnePlanet XR は、AR/MR/VPS技術に専門特化したコンサルティングサービスです。豊富な実績を元に、AR/MR技術を活用した新たな事業の立ち上げ支援や、社内業務のデジタル化/DX推進など、貴社の必要とするイノベーションを実現いたします。

ご相談から受け付けております。ご興味ございましたらお問い合わせください。


Magic Leap2 の コントローラ

コントローラの位置、回転、各種ボタンの情報を取得するデモアプリケーションを作成します。


開発環境 / 動作環境

Unity Editor 2022.2.0b8.3023
Magic Leap SDK 1.1.0-dev2
Magic Leap Unity Package 1.2.0
Magic Leap XR Plugin 7.0.0.pre.1
Magic Leap2 OS 1.1.0-dev2 (B3E.221117.04-R.028)


ヒエラルキー

Controller Example

シーンを新規作成します。Main Cameraは削除し、XR Rigのプレファブをヒエラルキーに配置します。
Game Objectを作成し、名前を Controller Example にします。


ControllerExample

Controller Example の Game Object にアタッチするControllerExampleというスクリプトを作成します。

using UnityEngine;
using UnityEngine.InputSystem;
using UnityEngine.XR.MagicLeap;
using TMPro;

public class ControllerExample : MonoBehaviour
{
    private MagicLeapInputs _mlInputs;
    private MagicLeapInputs.ControllerActions _controllerActions;

    [SerializeField]
    private TextMeshProUGUI info;

    void Start()
    {
        _mlInputs = new MagicLeapInputs();
        _mlInputs.Enable();
        _controllerActions = new MagicLeapInputs.ControllerActions(_mlInputs);
    }

    private void Update()
    {
        if (_controllerActions.IsTracked.IsPressed())
        {
            info.text = "";
            info.text+="Position: " + _controllerActions.Position.ReadValue<Vector3>() + "\n";
            info.text+= "Rotation: " + _controllerActions.Rotation.ReadValue<Quaternion>() + "\n";
            info.text+= "Trigger: " + _controllerActions.Trigger.ReadValue<float>() + "\n";
            info.text += "Bumper: " + _controllerActions.Bumper.IsPressed() + "\n";
            info.text+= "Menu: " + _controllerActions.Menu.IsPressed() + "\n";
            info.text+= "Touchpad Position: " + _controllerActions.TouchpadPosition.ReadValue<Vector2>() + "\n";
            info.text+= "Touchpad Press: " + _controllerActions.TouchpadTouch.IsPressed() + "\n";
            info.text+= "Touchpad Force: " + _controllerActions.TouchpadForce.ReadValue<float>() + "\n";
        }
    }

    private void OnDestroy()
    {
        _mlInputs.Dispose();
    }
}

ControllerActionsからコントローラの入力情報を取得します。
Updateのの冒頭でIsTracked.IsPressed()でコントローラの接続状態のチェックを行い、trueであれば入力情報をテキストに設定します。


コントローラ入力情報をテキストに表示

コントローラの入力情報を表示するUIを作成します。以下の記事に従って構築してください。


フィールド設定

コントローラ入力情報を表示するText (TMP)をController Exampleに設定します。


実行

動画はコントローラの位置と回転、トリガーとバンパー、タッチパッド(位置とボタンの押している強さ。)のみ表示していますが、今回、作成しているExampleではメニューとタッチパッドの押下判定も追加しています。


OnePlanet XR

https://1planet.co.jp/xrconsulting.html

AR/MR/VPS技術に専門特化したコンサルティングサービス

Magic Leap2 を使ったソリューションのご検討の方からのお問い合わせ、お待ちしております。


お問い合わせ先

https://1planet.co.jp/xrconsulting.html#op_form



OnePlanet Tech Magazine

Magic Leap1 、Magic Leap2、スマホAR(Niantic Lightship ARDK、WebAR、VPSなど)といったAR技術全般をブログマガジンを連載しています。