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

时间:2023-02-14 15:11:39

这篇文章是【Oculus Interaction SDK】系列的一部分,如果发现有对不上的对方,可以回去翻看我之前发布的文章,或在评论区留言。如果文章的内容已经不适用于新版本了,也可以直接联系我,我会持续更新文章内容。

当前适用版本:

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

文章最近更新日期:2023.02.14


在之前的文章里,我们都是直接使用 OculusInteractionSampleRig 来进行操作的,它会直接识别我们是在使用手柄还是单纯的手,从而显示对应的控制器模型或手的模型

如果我希望使用控制器时在游戏中也显示手的模型,这该怎么办呢?

别着急,这就是本篇文章要解决的问题!

 

创建新的控制器

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

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

 

复制一个 Hands,重命名为 Controller Hands

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

 

移除 Controller Hands 的 Hand Skeleton OVR 组件

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

 

找到 HandDataSource,删除它所有的组件(注:从此处开始,后续步骤左右手类似,文章只展示左手的设置过程)

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

 

为 HandDataSource 添加 From OVR Controller Hand Data Source 组件

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

 

Camera Rig Ref 和 Tracking To World Transformer 引用 InputOVR,Hmd Data 引用 Hmd,Update After 引用 LeftHand,Handedness 选择 Left

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

 

找到 LeftHand,在 Hand 组件的 Update After 和 I Modify Data From Source Mono 处引用 HandDataSource

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

 

在 Project 窗口搜索 OculusHand,找到 OculusHand_L / OculusHand_R 使其成为对应的 HandDataSource 的子物体

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

 

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

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

 

回到 OculusHand_L,在 Animator 组件的 Controller 处引用 HandController_l_ 作为动画控制器

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

 

给 OuclusHand_L 添加 Animated Hand OVR 组件,Controller 选择 L Touch,Animator 引用自身的 Animator 组件

Animator 组件的 Culling Mode 选择 Always Animate

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

 

接下来这一步很关键!!

锁定 HandDataSource 的 Inspector 面板,按住 Alt 键后点击 b_l_wrist 展开所有子物体,然后把手指的骨骼对应拖动到 Bones 列表(顺序如下)

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

 

这样手就出现了

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

 

目前来看我们的手与控制器的位置与旋转方向都产生了一定的偏差,下一步就来解决这个问题

 

设置手的位置和方向

在 OculusInteractionSampleRig 的子物体中找到  OVRControllerPrefab,关闭控制器模型的显示

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

 

然后回到手的 HandDataSource,在 From OVR Controller Hand Data Source 中调整手的偏移量(此处左右手数据一致)

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

 

我们来看看效果(为了演示效果,左手的控制器模型没有禁用)

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

 

最后,找到 HandInteractorsLeft 的子物体 HandGrabAPI,添加 Finger Raw Pinch Injector 组件,并引用自身的 Hand Grab API 组件(右手也一样)

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

 

大功告成!!!

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

 


参考资料

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