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)皮膚。 |