この例では、Fingerオブジェクトからボーンに素早くアクセスするために配列アクセサーを使用します。
参考までに、骨指数は、0 =中手骨、1 =近位、2 =中間、3 =遠位である。 BoneTypeの定義を調べることでこれを検証できます。
(慎重に、親指が他の指よりも1つの少ない骨を有する。)
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())
がこれに適しています。
EDIT:あなたがUnityエンジンの外にいる場合、謝罪します。その場合には、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