QCHT API

XR 手部追蹤子系統

XR 手部追蹤子系統由 OpenXR 手部追蹤功能實例化(huà)。它負責啓動和(hé)停止底層數據獲取循環,暴露手部數據,并觸發與手部追蹤相關的(de)事件。


靜态

描述

XRHandTrackingSubsystem GetSubsystemInManager()

返回 Subsystem Manager 中的(de)第一個(gè) XR 手部追蹤子系統實例(如果存在)。

 

非靜态

描述

HandTrackingStatus Status

獲取手部追蹤狀态,可(kě)能的(de)狀态包括空閑(Idle)、運行中(Running)或錯誤(Error)。

void Start()

啓動手部追蹤子系統。

void Stop()

停止手部追蹤子系統。

Hand LeftHand

獲取左手的(de)數據。

Hand RightHand

獲取右手的(de)數據。

Hand GetHand(XrHandedness handedness)

根據手部屬性獲取手部數據。

event Action<Hand> OnHandTracked

如果這(zhè)一幀中有手部被追蹤,會觸發此事件。

event Action<Hand> OnHandUntracked

如果這(zhè)一幀中有手部被取消追蹤,會觸發此事件。

event Action<UpdatePhase> OnHandsUpdated

在兩隻手的(de)數據都已更新後觸發此事件。更新階段可(kě)以是動态(Dynamic,更新調用(yòng)之前)或渲染之前(BeforeRender)。


Hand 結構體

手部數據是由手部追蹤子系統及其手部追蹤提供程序填充的(de)結構體。

可(kě)以通(tōng)過調用(yòng)子系統引用(yòng)中的(de) LeftHand 和(hé) RightHand 方法來(lái)獲取左右手的(de)數據。

有關詳細信息,請參閱上述 XR 手部追蹤子系統中的(de) LeftHand 和(hé) RightHand。


非靜态

描述

XrHandedness Handedness

手部屬性,可(kě)以是 XR_HAND_LEFT(左手)或 XR_HAND_RIGHT(右手)。

XrSpace Space

存儲關節數據的(de)空間,可(kě)以是 XR_HAND_LOCAL(本地空間)或 XR_HAND_WORLD(世界空間,在 XR Origin 中)。

bool IsTracked

如果手部當前被追蹤,則爲真。

XrHandGesture Gesture

手部追蹤後端檢測到的(de)手勢。

float GestureRatio

檢測到的(de)手勢的(de)比例,範圍從 0f 到 1f。

float FlipRatio

手部翻轉比例,範圍從 -1f 到 1f,表示手掌朝向頭顯(HMD)位置的(de)相反方向或相同方向。

float Scale

手部縮放範圍,從 0.5f 到 1.6f。

Pose Root

手部根部姿勢(相當于 XR Origin 中的(de)手腕中心姿勢)。

Pose[] Joints

手部關節姿勢。

Pose GetHandJoint(XrHandJoint joint)

返回指定的(de)關節姿勢。


XR 手部追蹤管理(lǐ)器

XR 手部追蹤管理(lǐ)器是負責處理(lǐ)手部追蹤可(kě)視化(huà)的(de)組件。它通(tōng)過監聽(tīng)手部追蹤子系統事件來(lái)實例化(huà)手部預制體。


靜态

描述

GameObject DefaultLeftHandPrefab

參考資源文件夾中的(de)默認左手預制體:Packages > Prefabs > Resources > QualcommHandLeft

GameObject DefaultRightHandPrefab

參考資源文件夾中的(de)默認右手預制體:Packages > Prefabs > Resources > QualcommHandRight

XRHandTrackingManager InstantiateHandTrackingManager()

使用(yòng)默認手部預制體實例化(huà)手部跟蹤管理(lǐ)器。

XRHandTrackingManager GetOrCreate(GameObject leftHandPrefab, GameObject rightHandPrefab)

獲取現有的(de)手部跟蹤管理(lǐ)器,如果不存在則創建一個(gè),并使用(yòng)參數中給出的(de)手部預制體。

void Destroy(XRHandTrackingManager manager)

銷毀指定的(de)手部跟蹤管理(lǐ)器實例,如果存在則嘗試找到并銷毀它。

非靜态

描述

GameObject LeftHandPrefab

要實例化(huà)的(de)左手預制體對(duì)象。

GameObject RightHandPrefab

要實例化(huà)的(de)右手預制體對(duì)象。

void RefreshLeftHand()

如果預制體發生更改,則重新生成左手對(duì)象。

void RefreshRightHand()

如果預制體發生更改,則重新生成右手對(duì)象。

void ToggleLeftHand(bool visible)

切換左手的(de)可(kě)見性。

void ToggleRightHand(bool visible)

切換右手的(de)可(kě)見性。

void SetLeftHandSkin(HandSkin skin)

如果手部對(duì)象支持設置皮膚,則設置左手的(de)皮膚。

void SetRightHandSkin(HandSkin skin)

如果手部對(duì)象支持設置皮膚,則設置右手的(de)皮膚。