Last active
July 21, 2020 02:33
-
-
Save yuujii/43347aa5a0b68e930f182ed3a58a375e to your computer and use it in GitHub Desktop.
Magic LeapのControlのボタンにイベントを登録できるやつ #Unity #ML1
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System; | |
using UnityEngine; | |
using UnityEngine.UI; | |
using UnityEngine.XR.MagicLeap; | |
using System.Collections.Generic; | |
using UnityEngine.Events; | |
namespace MagicLeap | |
{ | |
/// <summary> | |
/// Magic LeapのControlのボタンにイベントを登録できるやつ | |
/// </summary> | |
public class MLControlManager : MonoBehaviour | |
{ | |
[SerializeField] | |
private ControllerConnectionHandler _controllerConnectionHandler; | |
[SerializeField] | |
private UnityEvent m_touchpad_down_events = new UnityEvent(); | |
// タッチパッドのスワイプをリアルタイムに取れるものではなく、ジェスチャ認識した結果が取れるっぽい。 | |
[SerializeField] | |
private UnityEvent m_touchpad_update_events = new UnityEvent(); | |
[SerializeField] | |
private UnityEvent m_touchpad_up_events = new UnityEvent(); | |
[SerializeField] | |
private UnityEvent m_trigger_down_events = new UnityEvent(); | |
[SerializeField] | |
private UnityEvent m_trigger_up_events = new UnityEvent(); | |
[SerializeField] | |
private UnityEvent m_bumper_down_events = new UnityEvent(); | |
[SerializeField] | |
private UnityEvent m_bumper_up_events = new UnityEvent(); | |
[SerializeField] | |
private UnityEvent m_home_down_events = new UnityEvent(); | |
[SerializeField] | |
private UnityEvent m_home_up_events = new UnityEvent(); | |
[SerializeField, Tooltip("Text to update on Control changes.")] | |
private Text _statusLabel; | |
#region Unity Methods | |
void Start() | |
{ | |
_controllerConnectionHandler = GetComponent<ControllerConnectionHandler>(); | |
MLInput.Start(); | |
MLInput.OnControllerTouchpadGestureStart += HandleOnTouchpadDown; | |
MLInput.OnControllerTouchpadGestureContinue += HandleOnTouchpadContinue; | |
MLInput.OnControllerTouchpadGestureEnd += HandleOnTouchpadUp; | |
MLInput.OnControllerButtonDown += HandleOnButtonDown; | |
MLInput.OnControllerButtonUp += HandleOnButtonUp; | |
MLInput.OnTriggerDown += HandleOnTriggerDown; | |
MLInput.OnTriggerUp += HandleOnTriggerUp; | |
} | |
/// <summary> | |
/// Unregister callbacks and stop input API. | |
/// </summary> | |
void OnDestroy() | |
{ | |
MLInput.OnControllerTouchpadGestureStart -= HandleOnTouchpadDown; | |
MLInput.OnControllerTouchpadGestureContinue -= HandleOnTouchpadContinue; | |
MLInput.OnControllerTouchpadGestureEnd -= HandleOnTouchpadUp; | |
MLInput.OnControllerButtonDown -= HandleOnButtonDown; | |
MLInput.OnControllerButtonUp -= HandleOnButtonUp; | |
MLInput.OnTriggerDown -= HandleOnTriggerDown; | |
MLInput.OnTriggerUp -= HandleOnTriggerUp; | |
MLInput.Stop(); | |
} | |
#endregion | |
#region Private Methods | |
/// <summary> | |
/// Cannot make the assumption that a privilege is still granted after | |
/// returning from pause. Return the application to the state where it | |
/// requests privileges needed and clear out the list of already granted | |
/// privileges. Also, unregister callbacks. | |
/// </summary> | |
private void OnApplicationPause(bool pause) | |
{ | |
if (pause) | |
{ | |
MLInput.OnControllerTouchpadGestureStart -= HandleOnTouchpadDown; | |
MLInput.OnControllerTouchpadGestureContinue -= HandleOnTouchpadContinue; | |
MLInput.OnControllerTouchpadGestureEnd -= HandleOnTouchpadUp; | |
MLInput.OnControllerButtonDown -= HandleOnButtonDown; | |
MLInput.OnControllerButtonUp -= HandleOnButtonUp; | |
MLInput.OnTriggerDown -= HandleOnTriggerDown; | |
MLInput.OnTriggerUp -= HandleOnTriggerUp; | |
MLInput.Stop(); | |
} | |
} | |
#endregion | |
#region Event Handlers | |
private void HandleOnTouchpadDown(byte controllerId, MLInputControllerTouchpadGesture touchpad) | |
{ | |
if (_controllerConnectionHandler.ConnectedController != MLInput.GetController(controllerId)) | |
return; | |
if (m_touchpad_down_events.GetPersistentEventCount() != 0) | |
m_touchpad_down_events.Invoke(); | |
var log = string.Format("Down: \ntouchpad.Angle: {0}\n Direction: {1}\n Distance: {2}\n FingerGap: {3}\n PosAndForce: {4}\n Radius: {5}\n Speed: {6}\n Type {7}", | |
touchpad.Angle, touchpad.Direction, touchpad.Distance, touchpad.FingerGap, touchpad.PosAndForce, | |
touchpad.Radius, touchpad.Speed, touchpad.Type); | |
if (_statusLabel != null) _statusLabel.text = log; | |
//Debug.Log(log); | |
} | |
private void HandleOnTouchpadContinue(byte controllerId, MLInputControllerTouchpadGesture touchpad) | |
{ | |
if (_controllerConnectionHandler.ConnectedController != MLInput.GetController(controllerId)) | |
return; | |
if (m_touchpad_update_events.GetPersistentEventCount() != 0) | |
m_touchpad_update_events.Invoke(); | |
var log = string.Format("Con: \ntouchpad.Angle: {0}\n Direction: {1}\n Distance: {2}\n FingerGap: {3}\n PosAndForce: {4}\n Radius: {5}\n Speed: {6}\n Type {7}", | |
touchpad.Angle, touchpad.Direction, touchpad.Distance, touchpad.FingerGap, touchpad.PosAndForce, | |
touchpad.Radius, touchpad.Speed, touchpad.Type); | |
if (_statusLabel != null) _statusLabel.text = log; | |
//Debug.Log(log); | |
} | |
private void HandleOnTouchpadUp(byte controllerId, MLInputControllerTouchpadGesture touchpad) | |
{ | |
if (_controllerConnectionHandler.ConnectedController != MLInput.GetController(controllerId)) | |
return; | |
if (m_touchpad_up_events.GetPersistentEventCount() != 0) | |
m_touchpad_up_events.Invoke(); | |
var log = string.Format("Up: \ntouchpad.Angle: {0}\n Direction: {1}\n Distance: {2}\n FingerGap: {3}\n PosAndForce: {4}\n Radius: {5}\n Speed: {6}\n Type {7}", | |
touchpad.Angle, touchpad.Direction, touchpad.Distance, touchpad.FingerGap, touchpad.PosAndForce, | |
touchpad.Radius, touchpad.Speed, touchpad.Type); | |
if (_statusLabel != null) _statusLabel.text = log; | |
//Debug.Log(log); | |
} | |
/// <summary> | |
/// Handles the event for trigger down. | |
/// </summary> | |
/// <param name="controllerId">The id of the controller.</param> | |
/// <param name="triggerValue">The value of the trigger.</param> | |
private void HandleOnTriggerDown(byte controllerId, float triggerValue) | |
{ | |
if (_controllerConnectionHandler.ConnectedController != MLInput.GetController(controllerId)) | |
return; | |
if (triggerValue >= 0.7f) | |
if (m_trigger_down_events.GetPersistentEventCount() != 0) | |
m_trigger_down_events.Invoke(); | |
if (_statusLabel != null) _statusLabel.text = "TriggerDownThreshold: " + MLInput.TriggerDownThreshold; | |
} | |
/// <summary> | |
/// Handles the event for trigger up. | |
/// </summary> | |
/// <param name="controllerId">The id of the controller.</param> | |
/// <param name="triggerValue">The value of the trigger.</param> | |
private void HandleOnTriggerUp(byte controllerId, float triggerValue) | |
{ | |
if (_controllerConnectionHandler.ConnectedController != MLInput.GetController(controllerId)) | |
return; | |
if (m_trigger_up_events.GetPersistentEventCount() != 0) | |
m_trigger_up_events.Invoke(); | |
if (_statusLabel != null) _statusLabel.text = "TriggerUpThreshold: " + MLInput.TriggerUpThreshold; | |
} | |
/// <summary> | |
/// Handles the event for button down. | |
/// </summary> | |
/// <param name="controllerId">The id of the controller.</param> | |
/// <param name="button">The button that is being released.</param> | |
private void HandleOnButtonDown(byte controllerId, MLInputControllerButton button) | |
{ | |
if (_controllerConnectionHandler.ConnectedController != MLInput.GetController(controllerId)) | |
return; | |
if (button == MLInputControllerButton.Bumper) | |
{ | |
if (m_bumper_down_events.GetPersistentEventCount() != 0) | |
m_bumper_down_events.Invoke(); | |
} | |
if (button == MLInputControllerButton.HomeTap) | |
{ | |
if (m_home_down_events.GetPersistentEventCount() != 0) | |
m_home_down_events.Invoke(); | |
} | |
} | |
/// <summary> | |
/// Handles the event for button up. | |
/// </summary> | |
/// <param name="controllerId">The id of the controller.</param> | |
/// <param name="button">The button that is being released.</param> | |
private void HandleOnButtonUp(byte controllerId, MLInputControllerButton button) | |
{ | |
if (_controllerConnectionHandler.ConnectedController != MLInput.GetController(controllerId)) | |
return; | |
if (button == MLInputControllerButton.Bumper) | |
{ | |
if (m_bumper_up_events.GetPersistentEventCount() != 0) | |
m_bumper_up_events.Invoke(); | |
} | |
if (button == MLInputControllerButton.HomeTap) | |
{ | |
if (m_home_up_events.GetPersistentEventCount() != 0) | |
m_home_up_events.Invoke(); | |
} | |
} | |
#endregion | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment