71 lines
2.5 KiB
C#
71 lines
2.5 KiB
C#
using System.Collections;
|
|
using UnityEngine.InputSystem;
|
|
using UnityEngine.UI;
|
|
using UnityEngine.XR.OpenXR.Input;
|
|
|
|
namespace UnityEngine.XR.OpenXR.Samples.ControllerSample
|
|
{
|
|
public class ActionToControl : MonoBehaviour
|
|
{
|
|
[Tooltip("Action Reference that represents the control")]
|
|
[SerializeField] private InputActionReference _actionReference = null;
|
|
|
|
[Tooltip("Optional text element that will be set to the name of the action")]
|
|
[SerializeField] private Text _text = null;
|
|
|
|
protected virtual void OnEnable()
|
|
{
|
|
if (_actionReference == null || _actionReference.action == null)
|
|
return;
|
|
|
|
_actionReference.action.started += OnActionStarted;
|
|
_actionReference.action.performed += OnActionPerformed;
|
|
_actionReference.action.canceled += OnActionCanceled;
|
|
|
|
StartCoroutine(UpdateBinding());
|
|
}
|
|
|
|
protected virtual void OnDisable()
|
|
{
|
|
if (_actionReference == null || _actionReference.action == null)
|
|
return;
|
|
|
|
_actionReference.action.started -= OnActionStarted;
|
|
_actionReference.action.performed -= OnActionPerformed;
|
|
_actionReference.action.canceled -= OnActionCanceled;
|
|
}
|
|
|
|
private IEnumerator UpdateBinding()
|
|
{
|
|
if (null != _text)
|
|
_text.text = _actionReference.action.name;
|
|
|
|
while (isActiveAndEnabled)
|
|
{
|
|
if (_actionReference.action != null &&
|
|
_actionReference.action.controls.Count > 0 &&
|
|
_actionReference.action.controls[0].device != null &&
|
|
OpenXRInput.TryGetInputSourceName(_actionReference.action, 0, out var actionName, OpenXRInput.InputSourceNameFlags.Component, _actionReference.action.controls[0].device))
|
|
{
|
|
if (null != _text && !string.IsNullOrEmpty(actionName))
|
|
_text.text = actionName;
|
|
OnActionBound();
|
|
break;
|
|
}
|
|
|
|
yield return new WaitForSeconds(1.0f);
|
|
}
|
|
}
|
|
|
|
protected virtual void OnActionStarted(InputAction.CallbackContext ctx) { }
|
|
|
|
protected virtual void OnActionPerformed(InputAction.CallbackContext ctx) { }
|
|
|
|
protected virtual void OnActionCanceled(InputAction.CallbackContext ctx) { }
|
|
|
|
protected virtual void OnActionBound()
|
|
{
|
|
}
|
|
}
|
|
}
|