Unity Meta Quest 一体机开发(十一):【手势追踪】远距离抓取

文章目录

  • 教程说明
  • 玩家配置 DistanceHandGrabInteractor
  • 物体配置 DistanceHandGrabInteractable
  • 调整物体飞向手部的速度
  • 调整探测物体的范围
    • ⭐HandFrustumNarraw
    • ⭐HandFrustumWide
    • ⭐HeadFrustum

此教程相关的详细教案,文档,思维导图和工程文件会放入 Spatial XR 社区。这是一个高质量 XR 社区,博主目前在内担任 XR 开发的讲师。此外,该社区提供教程答疑、及时交流、进阶教程、外包、行业动态等服务。

社区链接:
Spatial XR 高级社区(知识星球)
Spatial XR 高级社区(爱发电)

在这里插入图片描述


教程说明

这篇教程将会介绍如何用 Meta 的 Interaction SDK,将远处的物体抓取到手上。

环境配置可参考:https://blog.csdn.net/qq_46044366/article/details/133967343

配置一个基本的玩家物体可以参考前几期教程:https://blog.csdn.net/qq_46044366/article/details/134097455

系列教程专栏:https://blog.csdn.net/qq_46044366/category_12118293.html

配套的视频链接:
11.如何用VR手势追踪远距离抓取以及交互

​电脑操作系统:Windows 11

使用的 VR 设备:Meta Quest 3(Quest 系列都适用)

使用的 Unity 版本:2021.3.5 LTS (这里推荐使用 2021 及以上的 LTS 版本)

Meta XR SDK 版本:v57

官方文档:https://developer.oculus.com/documentation/unity/unity-gs-overview/

远距离抓取脚本介绍文档:
https://developer.oculus.com/documentation/unity/unity-isdk-distance-hand-grab-interaction/

远距离抓取配置过程文档:https://developer.oculus.com/documentation/unity/unity-isdk-create-distance-grab-interactions/

最终实现的效果:

Unity Meta Quest 一体机开发(十一):【手势追踪】远距离抓取_第1张图片


玩家配置 DistanceHandGrabInteractor

在 Unity 编辑器的 Project 窗口栏中搜索 DistanceHandGrabInteractor 物体:

Unity Meta Quest 一体机开发(十一):【手势追踪】远距离抓取_第2张图片
将这个 Prefab 拖到场景中,作为玩家物体上 HandInteractorsLeft 和 HandInteractorsRight 物体的子物体:

Unity Meta Quest 一体机开发(十一):【手势追踪】远距离抓取_第3张图片

点击 DistanceHandGrabInteractor 物体,将玩家物体上的 OVRHmd 物体拖到 HmdRef 脚本中的 Hmd 变量上:

Unity Meta Quest 一体机开发(十一):【手势追踪】远距离抓取_第4张图片

展开 DistanceHandGrabInteractor,激活 Visuals 子物体下的 HandGrabVisual 和 HandGrabGlow 物体:

Unity Meta Quest 一体机开发(十一):【手势追踪】远距离抓取_第5张图片

点击 HandGrabVisual 物体,将对应手部的 Synthetic Hand 进行赋值:

Unity Meta Quest 一体机开发(十一):【手势追踪】远距离抓取_第6张图片

点击 HandGrabGlow 物体,按下图所示进行赋值,另一只手同理:

Unity Meta Quest 一体机开发(十一):【手势追踪】远距离抓取_第7张图片
在玩家物体的 LeftHand 和 RightHand 下添加 HandVelocityCalculator Prefab,然后引用到 DistanceHandGrabInteractor 脚本中的 Velocity Calculator 中

Unity Meta Quest 一体机开发(十一):【手势追踪】远距离抓取_第8张图片

Unity Meta Quest 一体机开发(十一):【手势追踪】远距离抓取_第9张图片

最后,需要把 DistanceHandGrabInteractor 物体拖到 HandInteractorsLeft 和 HandInteractorsRight 物体的 Best Hover Interactor Group 脚本中:

Unity Meta Quest 一体机开发(十一):【手势追踪】远距离抓取_第10张图片

物体配置 DistanceHandGrabInteractable

接下来,我将配置一个具有物理碰撞效果和自定义抓取手势的物体。

首先物体的身上需要有碰撞体,刚体,Grabbable 脚本,Physics Grabbable 脚本。

Unity Meta Quest 一体机开发(十一):【手势追踪】远距离抓取_第11张图片

然后为物体录制抓取手势,可以参考这期教程:Unity Meta Quest 一体机开发(九):【手势追踪】通过录制抓取手势实现自定义抓取姿势

录好手势后找到物体的 HandGrabPose 子物体,修改手指的自由度(我这里将所有手指的自由度改为了 Locked):

Unity Meta Quest 一体机开发(十一):【手势追踪】远距离抓取_第12张图片

然后在物体的 HandGrabInteractable 子物体上添加 DistanceHandGrabInteractable 脚本,将物体身上的 Physics Grabbable 脚本拖到 DistanceHandGrabInteractable 脚本的 Physics Grabbable 变量上:

Unity Meta Quest 一体机开发(十一):【手势追踪】远距离抓取_第13张图片

调整物体飞向手部的速度

在 HandGrabInteractable 物体上添加 Move Towards Target Provider 脚本,然后将脚本拖到 DistanceHandGrabInteractable 脚本的 Movement Provider 变量上:

Unity Meta Quest 一体机开发(十一):【手势追踪】远距离抓取_第14张图片

修改 Travel Speed 可以修改物体飞向手部的速度。Travel Speed 越大,物体飞向手部所花的时间越长

调整探测物体的范围

DistanceHandGrabInteractor 会有自己的探测范围,在范围内的物体才能够触发远距离抓取。

我们找到玩家身上的 DistanceHandGrabInteractor 脚本:

Unity Meta Quest 一体机开发(十一):【手势追踪】远距离抓取_第15张图片
默认引用了三个 Frustum,我们可以定位到这三个 Frustum 的位置:

Unity Meta Quest 一体机开发(十一):【手势追踪】远距离抓取_第16张图片

⭐HandFrustumNarraw

Unity Meta Quest 一体机开发(十一):【手势追踪】远距离抓取_第17张图片

HandFrustumNarraw 被赋给了 Selection Frustum 变量,表示的是远距离抓取的探测范围,会从手部发出一个锥体的探测范围,在此范围内的物体会被选中,有资格触发远距离抓取。最靠近范围中心的物体会被选中。调整 Conical Frustom 脚本的参数可以修改探测范围。

Unity Meta Quest 一体机开发(十一):【手势追踪】远距离抓取_第18张图片

⭐HandFrustumWide

同样是从手部发出一个锥体范围,但是范围比 Narraw 更大。如果 HandFrustumWide 被赋给了 Deselection Frustum 变量,当物体被选中后,必须要退出 HandFrustumWide 的范围才能视为取消选中,而不是退出 Narraw 的范围。

Unity Meta Quest 一体机开发(十一):【手势追踪】远距离抓取_第19张图片

⭐HeadFrustum

头部发出一个锥体范围。如果 HeadFrustum 被赋给了 Aid Frustum 变量,当物体同时进入到 Aid Frustum 和 Selection Frustum 的范围内,才能被选中。也就是说我们要用手对准可抓取物体,并且看向可抓取物体时,如果物体同时进入到了这两个范围内,才能触发远距离抓取。

Unity Meta Quest 一体机开发(十一):【手势追踪】远距离抓取_第20张图片

你可能感兴趣的:(#,Unity,Quest,一体机开发,unity,游戏引擎,vr,手势追踪)