这篇文章是【Oculus Interaction SDK】系列的一部分,如果发现有对不上的对方,可以回去翻看我之前发布的文章,或在评论区留言。如果文章的内容已经不适用于新版本了,也可以直接联系我,我会持续更新文章内容。
当前适用版本:
- Unity 版本:2021.3.7f1c1
- Oculus Interaction SDK 版本:47.0
文章最近更新日期:2023.02.09
设置不同的抓握手势
之前在玩 ALEX 的时候,发现从不同的方向拿起同一件物品时会有不同的抓握手势,这种新奇的交互感受让我的游戏体验大幅提升。现在,使用新版本的 SDK 也可以很方便地设置自定义的抓握手势了
介于内容的特殊性,使用单纯的方块模型就没有什么意思了,我们找一个相对复杂一点的模型来进行演示
在 Project 窗口中搜索 mugMesh 直接拖到场景中,再给模型更换一个辨识度高一点的材质
给杯子添加 Mesh Collider、Rigidbody 和 Grabbable 组件 ,其中 Mesh Collider 需要勾选 Convex 选项
然后到导航栏打开 Oculus > Interaction > Hand Grab Pose Recorder
,这个工具可以帮助我们在运行模式下记录手的姿态,并保存为数据文件
- 选择需要记录手势的手(在这里我选择的是左手),没有选择的手的姿态不会被记录
- 选择设置手势对应的物体,我们需要他的刚体(Rigidbody)组件
- 这个工具有一个默认的幽灵手来帮助我们可视化已经录制的手势,在这里我就不做更改了
- 默认情况下是按下空格键来完成一次记录,你也可以选择其他按键,这里也不做修改
点击 Play 进入运行模式,开始录制不同的手势
录制完成之后记得保存数据,点击 Save To Collection 生成手势集合文件,保存完之后再退出运行模式
退出运行模式后,点击 Load From Collection 将手势数据加载到物品上
(这里有一个 bug,如果你发现 Load From Collection 按钮点击之后没有效果,把整个窗口高度缩小之后再点击就可以了)
对录制的手势进行调整
在打开手势的列表之后,可以看到手部关节处可以调整,可以自己对手势进行为微调
甚至可以搞出很多奇怪的手型
也可以设置抓握时手指的*度
甚至可以利用已经创建的左手的姿态来镜像一个右手姿态(在 Hand Grab Interactable 组件里)
调整完成后,测试下看看
看起来似乎是实现了使用不同的手势抓取物体,但手的姿态却并不像我们设计的那样受到限制
那么下一步就是要把手的姿态控制住!
限制手的姿态
回到 OculusInteractionSampleRig,找到 LeftHand 和 RightHand,把它们对应的子物体 LeftHandVisual / RightHandVisual 禁用掉
给左右手分别添加对应的 OVRLeftHandSynthetic / OVRRightHandSynthetic 组件(以下所有操作左右手类似,别忘记做另外一只手 ^_^)
别忘记在 I Modify Data From Source Mono 处引用 LeftHand
还需要一个 Hand Grab State Visual 组件,Hand Grab Interactor 引用 HandGrabInteractor,Synthetic Hand 引用自己的 Synthetic Hand 组件
大功告成!!!
使用控制器时,如果模型是手,该怎么实现姿态控制?
我们实现了在手势追踪模式下的手势姿态限制,但是控制器模式下手势姿态就没法使用了
如果我需要在使用控制器的前提下使用手的模型,那么控制器操作的手能不能实现姿态限制呢?
这个问题我会在后续的文章里解决,敬请期待!