前言

这篇文章是【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

内容来源于网络如有侵权请私信删除

文章来源: 博客园

原文链接: https://www.cnblogs.com/Christa/p/17078185.html

你还没有登录,请先登录注册
  • 还没有人评论,欢迎说说您的想法!