Skip to content

Commit d6451f8

Browse files
author
ChengNan Yang
committed
Add finger curl and grip button for hand tracking
1 parent 933d8e3 commit d6451f8

File tree

1 file changed

+20
-0
lines changed

1 file changed

+20
-0
lines changed

Assets/HTC.UnityPlugin/VRModule/Submodules/WaveHandTrackingSubmodule.cs

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -525,6 +525,26 @@ public void UpdateDeviceInput(IVRModuleDeviceStateRW state, bool isLeft)
525525
state.SetButtonPress(VRModuleRawButton.GestureIndexPinch, pinched);
526526
state.SetButtonTouch(VRModuleRawButton.GestureIndexPinch, pinched);
527527
state.SetAxisValue(VRModuleRawAxis.Trigger, pinch.pinch.strength);
528+
529+
var indexCurl = GetFingerCurl(state, HandJointName.IndexTip);
530+
var middleCurl = GetFingerCurl(state, HandJointName.MiddleTip);
531+
var ringCurl = GetFingerCurl(state, HandJointName.MiddleTip);
532+
var pinkyCurl = GetFingerCurl(state, HandJointName.PinkyTip);
533+
state.SetAxisValue(VRModuleRawAxis.IndexCurl, indexCurl);
534+
state.SetAxisValue(VRModuleRawAxis.MiddleCurl, middleCurl);
535+
state.SetAxisValue(VRModuleRawAxis.RingCurl, ringCurl);
536+
state.SetAxisValue(VRModuleRawAxis.PinkyCurl, pinkyCurl);
537+
state.SetAxisValue(VRModuleRawAxis.CapSenseGrip, (indexCurl + middleCurl + ringCurl + pinkyCurl) * 0.25f);
538+
state.SetButtonPress(VRModuleRawButton.Grip, indexCurl > 0.75f && middleCurl > 0.75f && ringCurl > 0.75f && pinkyCurl > 0.75f);
539+
state.SetButtonTouch(VRModuleRawButton.Grip, indexCurl > 0.5f && middleCurl > 0.5f && ringCurl > 0.5f && pinkyCurl > 0.5f);
540+
}
541+
542+
private float GetFingerCurl(IVRModuleDeviceStateRW state, HandJointName finger)
543+
{
544+
var palmDir = state.pose.forward;
545+
var fingerDir = state.handJoints[finger].pose.forward;
546+
var angle = Vector3.SignedAngle(palmDir, fingerDir, state.handJoints[finger].pose.right);
547+
return Mathf.InverseLerp(0f, 180f, angle);
528548
}
529549

530550
private static void InitializeHandTrackerInfo(ref WVR_HandTrackerInfo_t handTrackerInfo, ref WVR_HandJoint[] jointMappingArray, ref ulong[] jointValidFlagArray, uint count)

0 commit comments

Comments
 (0)