Skip to content

Commit 525544a

Browse files
author
lawwong
committed
Update to v1.13.4
* Changes - Add static API to retrieve pinch ray from Wave SDK - WaveHandTrackingSubmodule.TryGetLeftPinchRay(out Vector3 origin, out Vector3 direction) - WaveHandTrackingSubmodule.TryGetLeftPinchRay(out Vector3 origin, out Vector3 direction) - Returns true if the pinch ray is currently valid, that is having valid tracking and the app got input focus - Add 4 fingers curl & grip button values for Wave tracked hand device - Change GestureIndexPinch button active threshold from 0.95 to 0.5 for Wave tracked hand device * Package Changes - Now support Unity 2018.4 or newer due to the Asset Store publish restriction - https://assetstore.unity.com/publishing/release-updates#accepted-unity-versions-TjfK - Remove asmdef files from package archive
2 parents 985df5b + a9b9591 commit 525544a

File tree

7 files changed

+936
-570
lines changed

7 files changed

+936
-570
lines changed

Assets/HTC.UnityPlugin/VRModule/Modules/UnityXRModuleBase.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -261,6 +261,7 @@ public override void Update()
261261
}
262262
}
263263

264+
submodules.UpdateAllModulesActivity();
264265
submodules.UpdateModulesDeviceInput();
265266

266267
UpdateHapticVibration();

Assets/HTC.UnityPlugin/VRModule/Modules/WaveVRModule.cs

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -86,10 +86,12 @@ public override void UpdateRenderModel()
8686
m_modelObj.SetActive(false);
8787
#if VIU_WAVEXR_ESSENCE_CONTROLLER_MODEL
8888
#if VIU_WAVE_XRSDK_3_99_31_OR_NEWER
89-
m_modelObj.transform.parent.gameObject.AddComponent<PoseMode>();
89+
m_modelObj.AddComponent<PoseMode>();
9090
#endif
91-
m_modelObj.AddComponent<Wave.Essence.Controller.Model.RenderModel>();
92-
m_modelObj.AddComponent<Wave.Essence.Controller.Model.ButtonEffect>();
91+
GameObject controllerObj = new GameObject("Controller");
92+
controllerObj.transform.SetParent(m_modelObj.transform, false);
93+
controllerObj.AddComponent<Wave.Essence.Controller.Model.RenderModel>();
94+
controllerObj.AddComponent<Wave.Essence.Controller.Model.ButtonEffect>();
9395
#elif VIU_WAVEXR_ESSENCE_RENDERMODEL
9496
m_modelObj.AddComponent<Wave.Essence.Controller.RenderModel>();
9597
m_modelObj.AddComponent<Wave.Essence.Controller.ButtonEffect>();
@@ -123,12 +125,14 @@ public override void UpdateRenderModel()
123125
m_modelObj.SetActive(false);
124126
#if VIU_WAVEXR_ESSENCE_CONTROLLER_MODEL
125127
#if VIU_WAVE_XRSDK_3_99_31_OR_NEWER
126-
var pm = m_modelObj.transform.parent.gameObject.AddComponent<PoseMode>();
128+
var pm = m_modelObj.AddComponent<PoseMode>();
127129
pm.WhichHand = XR_Hand.NonDominant;
128130
#endif
129-
var rm = m_modelObj.AddComponent<Wave.Essence.Controller.Model.RenderModel>();
131+
GameObject controllerObj = new GameObject("Controller");
132+
controllerObj.transform.SetParent(m_modelObj.transform, false);
133+
var rm = controllerObj.AddComponent<Wave.Essence.Controller.Model.RenderModel>();
130134
rm.WhichHand = XR_Hand.NonDominant;
131-
var be = m_modelObj.AddComponent<Wave.Essence.Controller.Model.ButtonEffect>();
135+
var be = controllerObj.AddComponent<Wave.Essence.Controller.Model.ButtonEffect>();
132136
be.HandType = XR_Hand.NonDominant;
133137
#elif VIU_WAVEXR_ESSENCE_RENDERMODEL
134138
var rm = m_modelObj.AddComponent<Wave.Essence.Controller.RenderModel>();

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

Lines changed: 66 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ public void Fetch()
3939
}
4040

4141
private DeviceFeature deviceFeature;
42-
private TrackingActivator trackingActivator = TrackingActivator.Default;
42+
private static TrackingActivator trackingActivator = TrackingActivator.Default;
4343
private GestureActivator gestureActivator = GestureActivator.Default;
4444
private uint leftDeviceIndex = VRModule.INVALID_DEVICE_INDEX;
4545
private uint rightDeviceIndex = VRModule.INVALID_DEVICE_INDEX;
@@ -186,6 +186,40 @@ protected override void OnUpdateDeviceInput()
186186

187187
public override uint GetRightHandedIndex() { return rightDeviceIndex; }
188188

189+
public static bool TryGetLeftPinchRay(out Vector3 origin, out Vector3 direction)
190+
{
191+
if (!trackingActivator.isLeftValid)
192+
{
193+
origin = Vector3.zero;
194+
direction = Vector3.zero;
195+
196+
return false;
197+
}
198+
199+
var pinch = trackingActivator.getLeftPinchData;
200+
Coordinate.GetVectorFromGL(pinch.pinch.origin, out origin);
201+
Coordinate.GetVectorFromGL(pinch.pinch.direction, out direction);
202+
203+
return true;
204+
}
205+
206+
public static bool TryGetRightPinchRay(out Vector3 origin, out Vector3 direction)
207+
{
208+
if (!trackingActivator.isRightValid)
209+
{
210+
origin = Vector3.zero;
211+
direction = Vector3.zero;
212+
213+
return false;
214+
}
215+
216+
var pinch = trackingActivator.getRightPinchData;
217+
Coordinate.GetVectorFromGL(pinch.pinch.origin, out origin);
218+
Coordinate.GetVectorFromGL(pinch.pinch.direction, out direction);
219+
220+
return true;
221+
}
222+
189223
private enum FeatureActivity
190224
{
191225
Stopped,
@@ -458,9 +492,13 @@ public bool TryFetchData(WVR_PoseOriginModel originModel)
458492
return false;
459493
}
460494

461-
public bool isLeftValid { get { return trackingData.left.isValidPose; } }
495+
public bool isLeftValid { get { return trackingData.left.isValidPose && !Interop.WVR_IsInputFocusCapturedBySystem(); } }
496+
497+
public bool isRightValid { get { return trackingData.right.isValidPose && !Interop.WVR_IsInputFocusCapturedBySystem(); } }
462498

463-
public bool isRightValid { get { return trackingData.right.isValidPose; } }
499+
public WVR_HandPoseState_t getLeftPinchData { get { return pinchData.left; } }
500+
501+
public WVR_HandPoseState_t getRightPinchData { get { return pinchData.right; } }
464502

465503
public void UpdateJoints(IVRModuleDeviceStateRW state, bool isLeft)
466504
{
@@ -475,18 +513,41 @@ public void UpdateJoints(IVRModuleDeviceStateRW state, bool isLeft)
475513
state.handJoints[handJointMapping[s_NaturalHandJoints[i]]] = new JointPose(p);
476514
}
477515

478-
state.isPoseValid = data.isValidPose;
516+
state.isPoseValid = data.isValidPose && !Interop.WVR_IsInputFocusCapturedBySystem();
479517
state.pose = state.handJoints[HandJointName.Wrist].pose;
480518
}
481519

482520
public void UpdateDeviceInput(IVRModuleDeviceStateRW state, bool isLeft)
483521
{
484522
var pinch = isLeft ? pinchData.left : pinchData.right;
485-
var pinched = pinch.pinch.strength >= 0.95f;
523+
var pinched = pinch.pinch.strength >= 0.5f;
486524

487525
state.SetButtonPress(VRModuleRawButton.GestureIndexPinch, pinched);
488526
state.SetButtonTouch(VRModuleRawButton.GestureIndexPinch, pinched);
489527
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.RingTip);
532+
var pinkyCurl = GetFingerCurl(state, HandJointName.PinkyTip);
533+
var curlAvg = (indexCurl + middleCurl + ringCurl + pinkyCurl) * 0.25f;
534+
535+
state.SetAxisValue(VRModuleRawAxis.IndexCurl, indexCurl);
536+
state.SetAxisValue(VRModuleRawAxis.MiddleCurl, middleCurl);
537+
state.SetAxisValue(VRModuleRawAxis.RingCurl, ringCurl);
538+
state.SetAxisValue(VRModuleRawAxis.PinkyCurl, pinkyCurl);
539+
state.SetAxisValue(VRModuleRawAxis.CapSenseGrip, curlAvg);
540+
state.SetButtonPress(VRModuleRawButton.Grip, curlAvg > 0.75f);
541+
state.SetButtonTouch(VRModuleRawButton.Grip, curlAvg > 0.50f);
542+
}
543+
544+
private float GetFingerCurl(IVRModuleDeviceStateRW state, HandJointName finger)
545+
{
546+
var palmDir = state.pose.forward;
547+
var fingerDir = state.handJoints[finger].pose.forward;
548+
var angle = Vector3.SignedAngle(palmDir, fingerDir, state.pose.right);
549+
if (angle < -90f) { angle += 360f; }
550+
return Mathf.InverseLerp(0f, 180f, angle);
490551
}
491552

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

0 commit comments

Comments
 (0)