前言
這篇文章是【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 元件(右手也一樣)
大功告成!!!