12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
-
- namespace NRKernal
- {
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
-
- public class NRHandPointer : MonoBehaviour
- {
-
- public HandEnum handEnum;
-
- public NRPointerRaycaster raycaster;
-
- private ControllerHandEnum m_controllerHandEnum;
-
- private bool m_PointerEnabled;
-
- private void Awake()
- {
- m_controllerHandEnum = handEnum == HandEnum.RightHand ? ControllerHandEnum.Right : ControllerHandEnum.Left;
- raycaster.RelatedHand = m_controllerHandEnum;
- }
-
- private void OnEnable()
- {
- NRInput.OnControllerRecentering += OnRecentering;
- NRInput.OnControllerStatesUpdated += OnControllerStatesUpdated;
- }
-
- private void OnDisable()
- {
- NRInput.OnControllerRecentering -= OnRecentering;
- NRInput.OnControllerStatesUpdated -= OnControllerStatesUpdated;
- }
-
- private void OnControllerStatesUpdated()
- {
- UpdateTracker();
- }
-
- private void UpdateTracker()
- {
- var handState = NRInput.Hands.GetHandState(handEnum);
- m_PointerEnabled = NRInput.RaycastersActive && NRInput.RaycastMode == RaycastModeEnum.Laser && NRInput.Hands.IsRunning && handState.pointerPoseValid;
- raycaster.gameObject.SetActive(m_PointerEnabled);
- if (m_PointerEnabled)
- {
- TrackPose();
- }
- }
-
- private void TrackPose()
- {
- transform.position = NRInput.GetPosition(m_controllerHandEnum);
- transform.localRotation = NRInput.GetRotation(m_controllerHandEnum);
- }
-
- private void OnRecentering() { }
- }
- }
|