이 예제에서는 배열 객체를 사용하여 Finger 객체에서 뼈에보다 빠르게 액세스합니다.
참조 용으로 뼈 색인은 다음과 같습니다. 중수골, 1 = 근위, 2 = 중간, 3 = 원위. BoneType의 정의를보고이를 검증 할 수 있습니다.
(신중한는 엄지 손가락이 다른 손가락보다 하나 적은 골을 갖는다.)
Vector3 bone0Dir = finger.bones[0].Direction.ToVector3();
Vector3 bone1Dir = finger.bones[1].Direction.ToVector3();
float angle = Vector3.Angle(bone0Dir, bone1Dir);
이 예 중수골 및 finger
오브젝트의 근위 뼈 사이의 각도 각도를 검색한다.
Vector3.Angle은 부호없는 두 뼈 사이의 각도를 반환합니다. 부호 첨부 각도를 원할 경우 SignedAngle
함수를 대신 사용할 수 있습니다. 기준 축을 전달해야합니다. Vector3.Cross(hand.PalmarAxis(), hand.DistalAxis())
이 이에 적합합니다.
편집 : 당신은 유니티 엔진의 외부에 있다면 아, 죄송합니다, 대답은 조금 다르다. 이 경우, Leap.Vector.AngleTo은 충분하지만,이 라디안을 변환하는 간단한 방법 : 다시
Vector bone0Dir = finger.bones[0].Direction;
Vector bone1Dir = finger.bones[1].Direction;
float angle = bone0Dir.AngleTo(bone1Dir) * Vector.RAD_TO_DEG;
, 이것은 서명되지 않은 각도를 반환합니다,하지만 손가락은 보통 뒤쪽으로 구부러지지 않기 때문에이 귀하의 유스 케이스에 충분해야합니다. Math.Asin((bone0Dir.Cross(bone1Dir).Magnitude)) * RAD_TO_DEG
을 사용하여 (오른 손잡이) 부호 각도를 얻을 수도 있습니다.
Leap.Vector 함수와 표준 .NET 수학 라이브러리의 함수를 사용하여 Unity 엔진 외부 상황에 대한 대답을 추가했습니다. – omonobic