MagicLeap2 コントローラ入力の情報まとめ

MagicLeap2 コントローラ入力サンプル - TechnicalProtein

↑の記事で触ったController Input Event についての追加情報、ここで紹介されている以外のボタン入力とかはこちらの記事に書いてます

SDK 0.53.3 現在の情報

UnityのInputSystemを利用してMagicLeap2のコントローラの入力をトリガーする方法のおさらい

using UnityEngine;
using UnityEngine.InputSystem;


namespace Sandbox.Controller
{
    /// <summary>
    /// コントローラ入力サンプル.
    /// </summary>
    public class ControllerInputSample : MonoBehaviour
    {

        private MagicLeapInputs _mlInputs;
        private MagicLeapInputs.ControllerActions _controllerActions;
        
        
        private void Start()
        {
            // 新しいインスタンスを作成し、起動.
            _mlInputs = new MagicLeapInputs();
            _mlInputs.Enable();

            // 各入力のイベントハンドラを登録.
            _controllerActions = new MagicLeapInputs.ControllerActions(_mlInputs);
            _controllerActions.Bumper.started += HandleOnBumperStarted;
            _controllerActions.Bumper.performed += HandleOnBumperPerformed;
            _controllerActions.Bumper.canceled += HandleOnBumperCanceled;
        }
    

        private void OnDestroy()
        {
            // 登録していたハンドラを削除.
            _controllerActions.Bumper.started -= HandleOnBumperStarted;
            _controllerActions.Bumper.performed -= HandleOnBumperPerformed;
            _controllerActions.Bumper.canceled -= HandleOnBumperCanceled;

            // 入力の購読を終了.
            _mlInputs.Dispose();
        }

       
        private void HandleOnBumperStarted(InputAction.CallbackContext obj)
        {
            Debug.Log("The Bumper is started.");
        }
        

        private void HandleOnBumperPerformed(InputAction.CallbackContext obj)
        {
            Debug.Log($"The Bumper is performed.");
        }


        private void HandleOnBumperCanceled(InputAction.CallbackContext obj)
        {
            Debug.Log($"The Bumper is canceled.");
        }
        
    }
}

手順としては

  1. MagicLeapInputs 、フィールド名 _mlInputs

  2. _mlInputs.Enable() で起動

  3. MagicLeapInputs.ControllerActions、フィールド名 controllerActions のインスタンスを作成時に mlInputs を渡し、関連付けを行う

  4. InputAction.CallbackContext を引数にとるイベントハンドラを作成

  5. 取得したい入力のイベントに登録 ( 今回は Bumper ボタン )

  6. 購読の用がなくなったら 登録したイベントを削除し、_mlInputs.Dispose() で入力の購読を終了する

購読するイベントタイプ

イベントタイプ 解説
InputAction.started 入力の開始時に呼び出される
InputAction.performed 入力されている間呼び出される
InputAction.canceled 入力が終了時に呼び出される

まとめ

簡単にだが MagicLeap SDKAPI を利用したコントローラ入力をまとめた 一応公式APIの入力をそのまま使う以外にMRTKを利用した入力も今度書こうと思う