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

发布时间 2023-03-22 19:12:01作者: 千叶Christa

前言

前段时间 Oculus 的 SDK 频繁更新,很多已有的教程都不再适用于现在的版本了。本系列文章的主要目的是记录现版本常见功能的实现方法,便于自己后续开发。当然,不排除我文章刚写完 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 组件(右手也一样)

 

 

大功告成!!!

 


参考资料

Hand Presence with Controller - Oculus Interaction SDK - PART 7 - YouTube