XR Hand Tracking Subsystem
XR Hand Tracking Subsystem
は、 OpenXRのハンドトラッキング機能によってインスタンス化されます。基盤となるデータループの取得の開始と停止を制御し、ハンドデータを公開し、ハンドトラッキング関連のイベントをThrowします。
静的 | 説明 |
---|
XRHandTrackingSubsystem GetSubsystemInManager() | Subsystem Manager内にXR Hand Tracking Subsystemのインスタンスが存在する場合、最初のインスタンスを返します。 |
非静的 | 説明 |
---|
HandTrackingStatus Status | ハンドトラッキングの状態の取得します。 (Idle , Running , Error ) |
void Start() | ハンドトラッキングのサブシステムの開始します。 |
void Stop() | ハンドトラッキングのサブシステムの停止します。 |
Hand LeftHand | 左手のデータ。 |
Hand RightHand | 右手のデータ。 |
Hand GetHand(XrHandedness handedness) | 利き手別のデータの取得します。 |
event Action<Hand> OnHandTracked | このフレームで手が追跡された場合に発生します。 |
event Action<Hand> OnHandUntracked | このフレームで手が追跡されていない場合に発生します。 |
event Action<UpdatePhase> OnHandsUpdated | 両手のデータが更新された後に発生します。UpdatePhaseはDynamic (Updateコール前)またはBeforeRender にすることができます。 |
ハンド構造
ハンドデータは、ハンドトラッキングのサブシステムとプロバイダーによって満たされる構造体です。両手のデータは、サブシステムリファレンスでLeftHand
とRightHand
を呼び出すことで取得できます。
上記のXR Hand Tracking SubsystemでLeftHand
とRightHand
を参照してください。
非静的 | 説明 |
---|
XrHandedness Handedness | 利き手(XR_HAND_LEFT 、XR_HAND_RIGHT ) |
XrSpace Space | 関節データが格納されるSpace。XR_HAND_LOCAL またはXR_HAND_WORLD (XR Originの場合)。 |
bool IsTracked | 手がトラッキングされている場合はTrue 。 |
XrHandGesture Gesture | ハンドトラッキングのバックエンドで検出されたジェスチャー。 |
float GestureRatio | 検出されたジェスチャの比率。 (0f 〜1f ) |
float FlipRatio | 手のひらの向きがHMDの位置と反対を向いているか、またはHMDの位置に向かっているか。(-1f 〜1f ) |
float Scale | 手のスケール。(0.5f 〜1.6f ) |
Pose Root | 手のルートポーズ。(XR Originの手首のセンターポーズに相当) |
Pose[] Joints | 手の関節のポーズ。 |
Pose GetHandJoint(XrHandJoint joint) | 特定の関節ポーズを返します。 |
XR Hand Tracking Manager
XR Hand Tracking Managerは、ハンドトラッキングの視覚化の部分を処理するコンポーネントです。ハンドトラッキングのサブシステムのイベントをListenして、手のプレハブをインスタンス化する役割を担います。
静的 | 説明 |
---|
GameObject DefaultLeftHandPrefab | Resourcesフォルダー内のデフォルトのLeft Handプレハブへの参照。Packages > Prefabs > Resources > QualcommHandLeft |
GameObject DefaultRightHandPrefab | Resourcesフォルダー内のデフォルトのRight Handプレハブへの参照。Packages > Prefabs > Resources > QualcommHandRight |
XRHandTrackingManager InstantiateHandTrackingManager() | デフォルトのハンドプレハブを使用してHand Tracking Managerをインスタンス化します。 |
XRHandTrackingManager GetOrCreate(GameObject leftHandPrefab, GameObject rightHandPrefab) | 既存のHand Tracking Managerを取得します。存在しない場合はパラメーターで指定されたハンドプレハブを使用してHand Tracking Managerを作成します。 |
void Destroy(XRHandTrackingManager manager) | 指定されたHand Tracking Managerのインスタンスを破棄します。存在する場合は破棄するインスタンスを探します。 |
非静的 | 説明 |
---|
GameObject LeftHandPrefab | インスタンス化される左手のプレハブのオブジェクト。 |
GameObject RightHandPrefab | インスタンス化される右手のプレハブのオブジェクト。 |
void RefreshLeftHand() | プレハブが変更された場合、左手のオブジェクトを再生成します。 |
void RefreshRightHand() | プレハブが変更された場合、右手のオブジェクトを再生成します。 |
void ToggleLeftHand(bool visible) | 左手の表示と非表示を切り替えます。 |
void ToggleRightHand(bool visible) | 右手の表示と非表示を切り替えます。 |
void SetLeftHandSkin(HandSkin skin) | 左手のスキンを設定します。(設定可能な場合) |
void SetRightHandSkin(HandSkin skin) | 右手のスキンを設定します。(設定可能な場合) |