12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
- namespace NRKernal.NRExamples
- {
- public class HandJointFollowTarget : MonoBehaviour
- {
- public HandEnum handEnum;
- public HandJointID handJoint;
- public HandGesture activeByHandGesture = HandGesture.None;
- public bool alwaysWorldUp;
- public float worldUpOffset;
- private HandState m_RelatedHandState;
- private void Update()
- {
- if (!NRInput.Hands.IsRunning)
- return;
- m_RelatedHandState = NRInput.Hands.GetHandState(handEnum);
- UpdateJointPose();
- }
- private void UpdateJointPose()
- {
- if (m_RelatedHandState == null || !m_RelatedHandState.isTracked)
- return;
- var jointPose = m_RelatedHandState.GetJointPose(handJoint);
- if (alwaysWorldUp)
- {
- transform.position = jointPose.position + Vector3.up * worldUpOffset;
- var eulerAngles = jointPose.rotation.eulerAngles;
- eulerAngles.x = 0f;
- eulerAngles.z = 0f;
- transform.eulerAngles = eulerAngles;
- }
- else
- {
- transform.position = jointPose.position;
- transform.rotation = jointPose.rotation;
- }
- }
- private bool ShouldActive()
- {
- if (m_RelatedHandState == null || !m_RelatedHandState.isTracked)
- return false;
- if (activeByHandGesture == HandGesture.None)
- return true;
- if (m_RelatedHandState.currentGesture == activeByHandGesture)
- return true;
- return false;
- }
- }
- }
|