找回密码
 立即注册
查看: 311|回复: 0

Unity + Oculus Quest 之五 Grab

[复制链接]
发表于 2022-2-1 11:20 | 显示全部楼层 |阅读模式
Oculus Integration

出乎意料的,在 VR 中想要 Grab things,或者想让东西 interactable 很容易,如果是用的 Oculus Integration 的话,还是如同以前一样配置好 project,或者建议可以直接在配置好的 project 中创建一个新的场景,然后依旧:

  • Assets | Oculus | VR | Prefabs | OVRCameraRig 拖到新建的场景中
  • CustomHandLeft CustomHandRight 放到相应的位置
  • 删掉默认的 camera
整点 cube, cylinder 弄成保龄球台的样子  ,当然,记得给 cylinder 添加上刚体,然后新建一个球体,同样添加上刚体,最重要的是 Add Component, 搜索 OVR Grabble,添加上这个 script.
一个简单的保龄球游戏就完成了,一行代码都没有, 。能让这件事这么简单的多亏了 Oculus Integration 内置的脚本 - OVRGrabbable.cs 和  OVRGrabber.cs.


使用  OVR Grab 也有一些注意事项:

  • 可以设置能够 Grab 的位置,比如一把长刀,我们设置几个 Grab Points
  • 比如如果物体在手中有奇怪的抖动的话,注意是不是要去 CustomHand 的 Inspector 里面选一下 Parent Held Object
XR Interaction Toolkit

如果我们用的是 XR Interaction Toolkit 呢? 完全类似, 甚至我们可以隔空抓取 。同样创建红球,搜索添加 XR  Grab Interactable,这样就完成了,可以看到如果是可以互动的物体 - 当这个 Ray 指到这个小球就变色提醒我们可以互动。



(如果你想用 Oculus Integration 做到这样的远处召唤效果,那么需要用 DistanceGrabHandLeft/Right Prefab,添加的 Distance Grabber)
当然如果想要直接抓取,在 LeftHandController 上我们把比如 XR Ray Interaction, Line Renderer, XR Interactor Line Visual 都给删掉,然后搜索添加 XR Direct Interactor, 再添加一个 Sphere Collider, Is Trigger 选中, Radius 设小一点 - 0.08. (但是注意需要把用来表示 controller 方块的 collider 取消,否则可能你还没抓住小球的时候它已经被撞走了, )。



道理也是一样的,感谢内置的 Script,但是这里我们的 controller 用的就是一个方块表示,如果我们想要学 Oculus Integration 一样,用带动画的手来表示的话,那么需要深入理解 InputSystem 和 InputAction.
关于 Grab 还可以注意的点包括:

  • 用 Layer 来管理可以 Grab 的物体, 这样可以设置 Interaction Layer Mask
  • 实际上点开 XR Grab Interactable,也有很多设置选项,包括 haptics,在这里也可以简单的开启它们
更多的可以参考:

  • add-and-configure-an-interactable-object/XR Interaction Toolkit
  • DistanceGrab Sample Scene/Oculus Integration
  • customizing-interactables-in-xr-interaction-toolkit

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-11-16 19:42 , Processed in 1.739074 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表