【Oculus Interaction SDK】(九)使用控制器時顯示手的模型

2023-02-14 18:01:13

前言

這篇文章是【Oculus Interaction SDK】系列的一部分,如果發現有對不上的對方,可以回去翻看我之前釋出的文章,或在評論區留言。如果文章的內容已經不適用於新版本了,也可以直接聯絡我,我會持續更新文章內容。

當前適用版本:

  • Unity 版本:2021.3.7f1c1
  • Oculus Interaction SDK 版本:47.0

文章最近更新日期:2023.02.14


在之前的文章裡,我們都是直接使用 OculusInteractionSampleRig 來進行操作的,它會直接識別我們是在使用手柄還是單純的手,從而顯示對應的控制器模型或手的模型

如果我希望使用控制器時在遊戲中也顯示手的模型,這該怎麼辦呢?

彆著急,這就是本篇文章要解決的問題!

 

建立新的控制器

首先,我們需要禁用原本的控制器

 

複製一個 Hands,重新命名為 Controller Hands

 

移除 Controller Hands 的 Hand Skeleton OVR 元件

 

找到 HandDataSource,刪除它所有的元件(注:從此處開始,後續步驟左右手類似,文章只展示左手的設定過程)

 

為 HandDataSource 新增 From OVR Controller Hand Data Source 元件

 

Camera Rig Ref 和 Tracking To World Transformer 參照 InputOVR,Hmd Data 參照 Hmd,Update After 參照 LeftHand,Handedness 選擇 Left

 

找到 LeftHand,在 Hand 元件的 Update After 和 I Modify Data From Source Mono 處參照 HandDataSource

 

在 Project 視窗搜尋 OculusHand,找到 OculusHand_L / OculusHand_R 使其成為對應的 HandDataSource 的子物體

 

找到 OculusHand_L > l_handMeshNode,禁用 Skinned Mesh Renderer 元件

 

回到 OculusHand_L,在 Animator 元件的 Controller 處參照 HandController_l_ 作為動畫控制器

 

給 OuclusHand_L 新增 Animated Hand OVR 元件,Controller 選擇 L Touch,Animator 參照自身的 Animator 元件

Animator 元件的 Culling Mode 選擇 Always Animate

 

接下來這一步很關鍵!!

鎖定 HandDataSource 的 Inspector 面板,按住 Alt 鍵後點選 b_l_wrist 展開所有子物體,然後把手指的骨骼對應拖動到 Bones 列表(順序如下)

 

這樣手就出現了

 

目前來看我們的手與控制器的位置與旋轉方向都產生了一定的偏差,下一步就來解決這個問題

 

設定手的位置和方向

在 OculusInteractionSampleRig 的子物體中找到  OVRControllerPrefab,關閉控制器模型的顯示

 

然後回到手的 HandDataSource,在 From OVR Controller Hand Data Source 中調整手的偏移量(此處左右手資料一致)

 

我們來看看效果(為了演示效果,左手的控制器模型沒有禁用)

 

最後,找到 HandInteractorsLeft 的子物體 HandGrabAPI,新增 Finger Raw Pinch Injector 元件,並參照自身的 Hand Grab API 元件(右手也一樣)

 

 

大功告成!!!

 


參考資料

https://www.youtube.com/watch?v=GF2BswT7EcM