public override void UpdateSkeletonTransforms() { Vector3[] bonePositions = GetBonePositions(); Quaternion[] boneRotations = GetBoneRotations(); for (int boneIndex = 0; boneIndex < bones.Length; boneIndex++) { if (bones[boneIndex] == null) { continue; } float skeletonBlend = 1; // get proper skeletal blend value SteamVR_Skeleton_FingerIndexEnum finger = GetFingerForBone(boneIndex); switch (finger) { case SteamVR_Skeleton_FingerIndexEnum.thumb: skeletonBlend = thumbSkeletonBlend; break; case SteamVR_Skeleton_FingerIndexEnum.index: skeletonBlend = indexSkeletonBlend; break; case SteamVR_Skeleton_FingerIndexEnum.middle: skeletonBlend = middleSkeletonBlend; break; case SteamVR_Skeleton_FingerIndexEnum.ring: skeletonBlend = ringSkeletonBlend; break; case SteamVR_Skeleton_FingerIndexEnum.pinky: skeletonBlend = pinkySkeletonBlend; break; default: break; } if (skeletonBlend >= 1) { SetBonePosition(boneIndex, bonePositions[boneIndex]); SetBoneRotation(boneIndex, boneRotations[boneIndex]); } else { SetBonePosition(boneIndex, Vector3.Lerp(bones[boneIndex].localPosition, bonePositions[boneIndex], skeletonBlend)); SetBoneRotation(boneIndex, Quaternion.Lerp(bones[boneIndex].localRotation, boneRotations[boneIndex], skeletonBlend)); } } }
float GetFingerCurl(SteamVR_Skeleton_FingerIndexEnum finger) { switch (finger) { case SteamVR_Skeleton_FingerIndexEnum.index: return(skeletonAction.GetFingerCurl(finger) * indexMax); case SteamVR_Skeleton_FingerIndexEnum.middle: return(skeletonAction.GetFingerCurl(finger) * middleMax); case SteamVR_Skeleton_FingerIndexEnum.ring: return(skeletonAction.GetFingerCurl(finger) * ringMax); case SteamVR_Skeleton_FingerIndexEnum.pinky: return(skeletonAction.GetFingerCurl(finger) * pinkyMax); case SteamVR_Skeleton_FingerIndexEnum.thumb: return(skeletonAction.GetFingerCurl(finger) * thumbMax); } ; return(skeletonAction.GetFingerCurl(finger)); }