123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
-
- 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(true);
- if (m_PointerEnabled)
- {
- TrackPose();
- }
- }
-
- private void TrackPose()
- {
- transform.position = NRInput.GetPosition(m_controllerHandEnum);
- transform.localRotation = NRInput.GetRotation(m_controllerHandEnum);
- }
-
- private void OnRecentering() { }
- }
- }
|