本日はHoloLens 2のHandTrakcing調査枠です。
HoloLens 2ではHandTrackingによってユーザーの手を検知することができます。
片手25点+手全体の軸などが検知できます。
今回はこのJointの情報を取得します。
〇左右の手の検知
次のスクリプトでは手、正確には手のジョイントを検知するスクリプトです。
using System.Collections; using System.Collections.Generic; using UnityEngine; using Microsoft.MixedReality.Toolkit.Utilities; using Microsoft.MixedReality.Toolkit.Input; /// <summary> /// This class detects the HoloLens 2's HandTracking joints. /// </summary> public class HandDetector : MonoBehaviour { [SerializeField, HeaderAttribute("DetectTargetHand")] HandMode HandDetectMode; Handedness handednesstype; enum HandMode { RightHand, LeftHand, BothHand, } // Start is called before the first frame update void Start() { //DetectRighitHandWrist if ((int)HandDetectMode == 0) { handednesstype = Handedness.Right; } //DetectLeftHandWrist if ((int)HandDetectMode ==1) { handednesstype = Handedness.Left; } //DetectBothHandWrist if ((int)HandDetectMode == 2) { handednesstype = Handedness.Both; } Debug.Log(handednesstype); } // Update is called once per frame void Update() { //DetectRighitHandWrist if (HandJointUtils.TryGetJointPose(TrackedHandJoint.Wrist, handednesstype, out MixedRealityPose pose)) { Debug.Log("Detect"); Debug.Log(pose); } } }
enum形で右、左、両方のどれかをinspectorウィンドウで指定しています。
if (HandJointUtils.TryGetJointPose(TrackedHandJoint.Wrist, handednesstype, out MixedRealityPose pose)) { }
[HandJointUtils.TryGetJointPose]メソッドは指定された[Handness]を持つオブジェクトから要求されたジョイントのポーズを取得します。
[TrackedHandJoint joint],[Handedness handedness],[out MixedRealityPose pose]の3つの引数を持ちそれぞれ次のようになります。
・TrackedHandJoint
追跡される手のジョイントを指します。
・Handedness
Handedness は、enum形で右手、左手、その他、など現在使用しているコントローラーを(HoloLensの場合手)指定します。
・MixedRealityPose
MixedRealityPoseは引数にTransform(vector3,Quaternion)を持ちます。
〇スクリプトの使い方
①MRTKを導入したシーンにからオブジェクトを作成して[HandDetector]コンポーネントをアタッチします。
②[HandDetectMode]に検知したい手を指定します。
③この状態でエディタを実行します。手が検知されると手の[Wrist]オブジェクトのTransform情報がデバッグログに返されます。
以上でHoloLens 2でHandTrackingのJointが検知できました。