10using System.Collections;
45 private static float[] s_standardFingertipLengths =
null;
48 s_standardFingertipLengths =
new float[5];
49 var testHand = TestHandFactory.MakeTestHand(isLeft:
true,
50 unitType: TestHandFactory.UnitType.UnityUnits);
51 for (
int i = 0; i < 5; i++) {
52 var fingertipBone = testHand.Fingers[i].
bones[3];
53 s_standardFingertipLengths[i] = fingertipBone.Length;
62 for (
int i = 0; i <
bones.Length; ++i) {
63 if (
bones[i] !=
null) {
67 bones[i].position = boneRootPos;
74 var boneVec = boneTipPos - boneRootPos;
78 if (_parentRiggedHand ==
null) {
79 _parentRiggedHand = GetComponentInParent<RiggedHand>();
81 if (_parentRiggedHand !=
null) {
82 var parentRiggedHandScale = _parentRiggedHand.transform.lossyScale.x;
83 if (parentRiggedHandScale != 0f && parentRiggedHandScale != 1f) {
84 boneVec /= parentRiggedHandScale;
88 var boneLen = boneVec.magnitude;
90 var standardLen = s_standardFingertipLengths[(int)this.
fingerType];
91 var newScale =
bones[i].transform.localScale;
93 newScale[lengthComponentIdx] = boneLen / standardLen;
94 bones[i].transform.localScale = newScale;
101 private int getLargestComponentIndex(Vector3 pointingVector) {
102 var largestValue = 0f;
104 for (
int i = 0; i < 3; i++) {
105 var testValue = pointingVector[i];
106 if (Mathf.Abs(testValue) > largestValue) {
108 largestValue = Mathf.Abs(testValue);
115 findBoneTransforms(useMetaCarpals);
119 private void findBoneTransforms(
bool useMetaCarpals) {
121 bones[1] = transform;
122 bones[2] = transform.GetChild(0).transform;
123 bones[3] = transform.GetChild(0).transform.GetChild(0).transform;
126 bones[0] = transform;
127 bones[1] = transform.GetChild(0).transform;
128 bones[2] = transform.GetChild(0).transform.GetChild(0).transform;
129 bones[3] = transform.GetChild(0).transform.GetChild(0).transform.GetChild(0).transform;
134 private Vector3 calulateModelFingerPointing() {
135 Vector3 distance = transform.InverseTransformPoint(transform.position) - transform.InverseTransformPoint(transform.GetChild(0).transform.position);
The Finger class represents a tracked finger.
FingerType
Enumerates the names of the fingers.
Quaternion GetBoneRotation(int bone_type)
Finger.FingerType fingerType
Vector3 GetJointPosition(int joint)
Manages the position and orientation of the bones in a model rigged for skeletal animation.
Vector3 modelFingerPointing
bool deformPosition
Allows the mesh to be stretched to align with finger joint positions. Only set to true when mesh is n...
Quaternion Reorientation()
void SetupRiggedFinger(bool useMetaCarpals)
override void UpdateFinger()
Updates model bone positions and rotations based on tracked hand data.
A skinned and jointed 3D HandModel.
static Vector3 CalculateZeroedVector(Vector3 vectorToZero)