这些关节名称被定义在Microsoft.MixedReality.Toolkit.Utilities.TrackedHandJoint枚举中。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Microsoft.MixedReality.Toolkit;
using Microsoft.MixedReality.Toolkit.Input;
using Microsoft.MixedReality.Toolkit.Utilities;
public class Test : MonoBehaviour
{
void Update()
{
/* 下面代码以轮询方式获取关节数据 */
//获取右手指尖的姿态数据
if (HandJointUtils.TryGetJointPose(TrackedHandJoint.IndexTip,
Handedness.Right, out MixedRealityPose pose))
{
}
//--End
//从手部关节服务获取关节转换对象
var handJointService = CoreServices.GetInputSystemDataProvider<IMixedRealityHandJointService>();
if (handJointService != null)
{
//获取右手指尖的转换对象
Transform jointTransform = handJointService.RequestJointTransform(TrackedHandJoint.IndexTip, Handedness.Right);
}
//--End
}
}
实现Microsoft.MixedReality.Toolkit.Input.IMixedRealityHandJointHandler接口的类可监听关节数据更新。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Microsoft.MixedReality.Toolkit;
using Microsoft.MixedReality.Toolkit.Input;
using Microsoft.MixedReality.Toolkit.Utilities;
/// <summary>
/// 通过实现接口来监听关节位置的更新
/// </summary>
public class MyHandJointEventHandler : MonoBehaviour, IMixedRealityHandJointHandler
{
public Handedness myHandedness;
void IMixedRealityHandJointHandler.OnHandJointsUpdated(InputEventData<IDictionary
<TrackedHandJoint, MixedRealityPose>> eventData)
{
if (eventData.Handedness == myHandedness)
{
if (eventData.InputData.TryGetValue(TrackedHandJoint.IndexTip,
out MixedRealityPose pose))
{
//关节坐标
Vector3 pos = pose.Position;
//关节旋转度
Quaternion rot = pose.Rotation;
//关节正前方矢量
Vector3 forward = pose.Forward;
//......
}
}
}
}
Microsoft.MixedReality.Toolkit.Input.HandJointUtils类 | |
序号 | 方法 |
1 |
public static bool TryGetJointPose(TrackedHandJoint joint, Handedness handedness, out MixedRealityPose pose) 获取关节姿态数据。 |
2 |
public static bool TryGetJointPose<T>(TrackedHandJoint joint, Handedness handedness, out MixedRealityPose pose) where T : class, IMixedRealityHand 泛型方法。获取关节姿态数据。 |
3 |
public static IMixedRealityHand FindHand(Handedness handedness) 返回手部控制器。 |
4 |
public static T FindHand<T>(Handedness handedness) where T : class, IMixedRealityHand 泛型方法。返回手部控制器。 |
Microsoft.MixedReality.Toolkit.Utilities.HandPoseUtils类 | |
序号 | 方法 |
1 |
public static float CalculateIndexPinch(Handedness handedness) 返回食指尖与拇指尖的捏合度。取值范围0~1,0表示完全张开,1表示完全捏合。 |
2 |
public static bool IsIndexGrabbing(Handedness hand) 如果食指尖(tip)比食指关节(knuckle)更靠近手腕(wrist),则返回true。 |
3 |
public static bool IsMiddleGrabbing(Handedness hand) 如果中指尖(tip)比中指关节(knuckle)更靠近手腕(wrist),则返回true。 |
4 |
public static bool IsThumbGrabbing(Handedness hand) 如果拇指尖(tip)比拇指关节(knuckle)更靠近手腕(wrist),则返回true。 |
5 |
public static float ThumbFingerCurl(Handedness handedness) 返回拇指卷曲度。取值范围0~1,0表示完全伸直,1表示完全卷曲。 |
6 |
public static float IndexFingerCurl(Handedness handedness) 返回食指卷曲度。取值范围0~1,0表示完全伸直,1表示完全卷曲。 |
7 |
public static float MiddleFingerCurl(Handedness handedness) 返回中指卷曲度。取值范围0~1,0表示完全伸直,1表示完全卷曲。 |
8 |
public static float RingFingerCurl(Handedness handedness) 返回无名指卷曲度。取值范围0~1,0表示完全伸直,1表示完全卷曲。 |
9 |
public static float PinkyFingerCurl(Handedness handedness) 返回小指卷曲度。取值范围0~1,0表示完全伸直,1表示完全卷曲。 |
Microsoft.MixedReality.Toolkit.Input.HandJointService类 | |
序号 | 方法 |
1 |
public Transform RequestJointTransform(TrackedHandJoint joint, Handedness handedness) 获取某关节的变换对象。 |
2 |
public bool IsHandTracked(Handedness handedness) 判断某只手是否正在被追踪。 |