MagicLeapコントローラのイベント取得方法
Tags: magicleap, unity3d
Published: 2020-07-01 17:20:48

公式のチュートリアルの動画だと若干コードが古かったりしたのでメモ

詳細な動作については後日追記予定


以下のボタン操作のバインディングのメモ

- バンパーボタン
- ホームボタン
- タッチパッド
- トリガー

```csharp
using UnityEngine;
using UnityEngine.XR.MagicLeap;


/// <summary>
/// MagicLeapコントローラ.
/// </summary>
public class MlController : MonoBehaviour, IController
{

    [SerializeField] MLInput.Controller controller;

    void Start()
    {
        // コントローラの入力を有効にし,対応するイベントハンドラを登録する.
        MLInput.Start();
        MLInput.OnControllerButtonDown += OnButtonDown;
        MLInput.OnControllerButtonUp += OnButtonUp;
        
        MLInput.OnTriggerDown += OnTriggerDown;
        MLInput.OnTriggerUp += OnTriggerUp;
        
        MLInput.OnControllerTouchpadGestureStart += OnTouchPadGestureStart;
        MLInput.OnControllerTouchpadGestureContinue += OnTouchPadGestureContinue;
        MLInput.OnControllerTouchpadGestureEnd += OnTouchPadGestureEnd;
    }


    void OnDestroy()
    {
        // コントローラの入力を無効にし,登録していたイベントハンドラを削除する.
        MLInput.Stop();
        MLInput.OnControllerButtonDown -= OnButtonDown;
        MLInput.OnControllerButtonUp -= OnButtonUp;
        
        MLInput.OnTriggerDown -= OnTriggerDown;
        MLInput.OnTriggerUp -= OnTriggerUp;

        MLInput.OnControllerTouchpadGestureStart -= OnTouchPadGestureStart;
        MLInput.OnControllerTouchpadGestureContinue -= OnTouchPadGestureContinue;
        MLInput.OnControllerTouchpadGestureEnd -= OnTouchPadGestureEnd;
    }


    /// <summary>
    /// ボタン押下時の処理.
    /// </summary>
    /// <param name="controllerId"></param>
    /// <param name="button"></param>
    void OnButtonDown(
        byte controllerId,
        MLInput.Controller.Button button)
    {
        switch (button)
        {
            case MLInput.Controller.Button.Bumper:
                break;
            
            case MLInput.Controller.Button.HomeTap:
                Application.Quit();
                break;
        }
    }

    
    /// <summary>
    /// ボタン押上時の処理.
    /// </summary>
    /// <param name="controllerId"></param>
    /// <param name="button"></param>
    void OnButtonUp(
        byte controllerId,
        MLInput.Controller.Button button)
    {
        switch (button)
        {
            case MLInput.Controller.Button.Bumper:
                break;
            
            case MLInput.Controller.Button.HomeTap:
                break;
        }
    }


    /// <summary>
    /// トリガーの押下処理.
    /// </summary>
    /// <param name="controllerId"></param>
    /// <param name="value"></param>
    void OnTriggerDown(
        byte controllerId,
        float value)
    {
    }


    /// <summary>
    /// トリガーの押上処理.
    /// </summary>
    /// <param name="controllerId"></param>
    /// <param name="value"></param>
    void OnTriggerUp(
        byte controllerId,
        float value)
    {
    }
    
    
    /// <summary>
    /// タッチパッドのジェスチャー始点.
    /// </summary>
    /// <param name="controllerId"></param>
    /// <param name="gesture"></param>
    void OnTouchPadGestureStart(
        byte controllerId,
        MLInput.Controller.TouchpadGesture gesture)
    {
    }

    /// <summary>
    /// タッチパッドのジェスチャー操作中.
    /// </summary>
    /// <param name="controllerId"></param>
    /// <param name="gesture"></param>
    void OnTouchPadGestureContinue(
        byte controllerId,
        MLInput.Controller.TouchpadGesture gesture)
    {
    }


    /// <summary>
    /// タッチパッドのジェスチャ終点.
    /// </summary>
    /// <param name="controllerId"></param>
    /// <param name="gesture"></param>
    void OnTouchPadGestureEnd(
        byte controllerId,
        MLInput.Controller.TouchpadGesture gesture)
    {
    }

}
```

### 取得結果

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">MagicLeapのインプット回り取れるようにした( ついでにそれっぽいデバッグウィンドウも作ってみた <a href="https://t.co/KiFPQMpIzk">pic.twitter.com/KiFPQMpIzk</a></p>&mdash; 松本隆介 (@matsumotokaka11) <a href="https://twitter.com/matsumotokaka11/status/1279827552391925760?ref_src=twsrc%5Etfw">July 5, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>