private static float CalculateJointLength(JointEnumArray.IReadOnly joints) { var len = 0f; var lastPos = joints[HandJointName.Wrist].pose.pos; foreach (var jointPose in joints.ValuesFrom(HandJointName.MiddleMetacarpal, HandJointName.MiddleTip)) { if (jointPose.isValid) { var pos = jointPose.pose.pos; len += (pos - lastPos).magnitude; lastPos = pos; } } return(len); }
private void UpdateFingerJoints(JointEnumArray.IReadOnly roomSpaceJoints, Transform parentTransform, RigidPose roomSpaceParentPoseInverse, HandJointName startJoint, HandJointName endJoint) { foreach (var index in EnumArrayBase <HandJointName> .StaticEnumsFrom(startJoint, endJoint)) { var jointTrans = m_modelJoints[index]; if (jointTrans == null) { continue; } var data = roomSpaceJoints[index]; if (!data.isValid) { continue; } var parentSpaceJointPose = roomSpaceParentPoseInverse * data.pose; UpdateJointTransformLocal(parentTransform, jointTrans, parentSpaceJointPose); parentTransform = jointTrans; roomSpaceParentPoseInverse = data.pose.GetInverse(); } }