Unity XR Interaction Toolkit(三)拾取物体

这篇具有很好参考价值的文章主要介绍了Unity XR Interaction Toolkit(三)拾取物体。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

首先配置一个可拾取的物体,右键->XR->Grab Interactable,就会创建一个0.1尺寸的小立方体

XRGrabInteractable:

Distance Calculation Mode:根据模式选择坐标点,可以选择Transform的坐标或者碰撞器的坐标

Select Mode:抓取方式,分为单手和双手,在变换脚本挂载时,会根据这个脚本激活

Movement Type:

        Velocity Tracking:通过设置刚体力移动,也就是说可以被物体遮挡,也会影响其他物体

        Kinematic:移动刚体,但是是运动学,自身不受碰撞影响,会影响其他物体

        Instantaneous:通过设置transform的坐标移动,不会触发物理机制

Attach Transform:依附点,为空的时候,会以物体中心为坐标。当不为空时,会贴合手柄的坐标和旋转角度

一、XR Interaction Toolkit代码拾取

手动添加到手柄拾取中

首先,我们需要在代码中获取这个被拾取的物体

IXRSelectInteractable(也就是XRGrabInteractable),还需要获取抓着他的交互器

IXRSelectInteractor(可以是DirectInteractor或RayInteractor,详细看上篇)。

IXRSelectInteractable很好获取,那么它的交互器怎么获取呢?

XRGrabInteractable grabObject;

void Handle(){
    IXRSelectInteractable interactable = grabObject as XRGrabInteractable;
    // 抓取的一个交互
    IXRSelectInteractor interactor = interactable.interactorsSelecting[0];
}

手动拾取代码,以下代码添加的抓取,会被真实手柄放开时丢弃。但是不能丢弃对真实手柄抓取的物体(有点鸡肋),如果执行时会有警告Debug。

XRGrabInteractable grabObject;

void Handle(){
    IXRSelectInteractable interactable = grabObject as XRGrabInteractable;
    // 抓取的一个交互
    XRBaseInteractor interactor = (XRBaseInteractor)interactable.interactorsSelecting[0];

    // 抓取
    interactor.StartManualInteraction(interactable);
    // 丢弃
    interactor.EndManualInteraction(interactable);
}

那么如何才能移除手中抓取的物体呢?

XRGrabInteractable grabObject;

void DropGrabObject(){
    XRInteractionManager manager = FindObjectType<XRInteractionManager>();

    IXRSelectInteractable interactable = grabObject as XRGrabInteractable;
    // 抓取的一个交互
    XRBaseInteractor interactor = (XRBaseInteractor)interactable.interactorsSelecting[0];
    
    // 丢弃
    manager.SelectExit(interactor, interactable);
    // 抓取
    manager.SelectEnter(interactor, interactable);
}

二、单手拾取

改变交互框架下,物体根据手柄的移动产生逻辑,可以制作拉门,摇杆,按钮等功能

了解XRGrabInteractable的运行机制

打开文件可以看到,一个ProcessInteractable函数

Unity XR Interaction Toolkit(三)拾取物体,Unity XR,unity,vr,xr

在这里,用swtich分隔开了多个状态,其中当updatePhase值为Dynamic或OnBeforeRender时,会处理物体的位置和角度信息,详细看UpdateTarget函数

在UpdateTarget函数里,通过InvokeGrabTransformersProcess函数获取一个ref的Pose值,然后在下面为Transform赋值,而这个InvokeGrabTransformersProcess函数,则是通过获取挂载物体身上的XRBaseGrabTransformer基类来更改Pose值

所以要写逻辑,只需要写一个Transformer脚本挂在物体身上,基类的Start方法会自动添加到XRGrabInteractable中,注意不要覆盖Start

下面是默认状态下的Transformer,没有挂载Transformer时会自动添加这个

Unity XR Interaction Toolkit(三)拾取物体,Unity XR,unity,vr,xr

如果要自定义移动方法,可以更改UpdateTarget里的内容

三、双手拾取

在单手拾取的基础上,获取第二只手柄的信息

grabInteractable.interactorsSelecting[1]

用来制作双手放大,双手旋转的功能文章来源地址https://www.toymoban.com/news/detail-715093.html

到了这里,关于Unity XR Interaction Toolkit(三)拾取物体的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • Unity VR 开发教程 OpenXR+XR Interaction Toolkit (四) 传送

    Unity VR 开发教程 OpenXR+XR Interaction Toolkit (四) 传送

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

    2024年02月12日
    浏览(12)
  • Unity VR 开发教程 OpenXR+XR Interaction Toolkit(七)射线抓取

    Unity VR 开发教程 OpenXR+XR Interaction Toolkit(七)射线抓取

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

    2024年02月13日
    浏览(15)
  • Unity之OpenXR+XR Interaction Toolkit如何自定义VR按键

    Unity之OpenXR+XR Interaction Toolkit如何自定义VR按键

    上一篇文章我们介绍了Unity的新版本InputSyste如何使用,这一篇文章,我们主要说一下,在新版基于OpenXR的VR项目中,如何自定义VR按钮的功能。 我们使用XR Interaction Toolkit插件时,它的几个Samples是非常有用的。如下所示: 它们分别是: 1.Starter Assets:官方示例Demo 2.XR Device Simul

    2024年02月15日
    浏览(20)
  • Unity VR 开发教程 OpenXR+XR Interaction Toolkit (五) UI

    Unity VR 开发教程 OpenXR+XR Interaction Toolkit (五) UI

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

    2024年02月11日
    浏览(13)
  • Unity VR 开发教程 OpenXR+XR Interaction Toolkit (二) 手部动画

    Unity VR 开发教程 OpenXR+XR Interaction Toolkit (二) 手部动画

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

    2024年02月11日
    浏览(12)
  • Unity之OpenXR+XR Interaction Toolkit实现 监听VR手柄按键

    Unity之OpenXR+XR Interaction Toolkit实现 监听VR手柄按键

    当我们接入XR Interaction Toolkit之后,我们可以很方便的做不同VR设备的适配,这在很大程度上提升了我们的开发效率,我们除了通过射线和物体交互之外,偶尔我们也会希望监听手柄上的部分按键的点击事件,今天我们就来实现如何监听VR手柄的按钮事件。 我们需要准备好Uni

    2024年02月05日
    浏览(36)
  • Unity VR开发教程 OpenXR+XR Interaction Toolkit(七)射线抓取

    Unity VR开发教程 OpenXR+XR Interaction Toolkit(七)射线抓取

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

    2023年04月08日
    浏览(11)
  • Unity之OpenXR+XR Interaction Toolkit实现 射线和物体交互事件回调

    Unity之OpenXR+XR Interaction Toolkit实现 射线和物体交互事件回调

    前面我们介绍了如何抓取物体,今天我们来说一下如何和3D的物体进行交互,得到接触的事件回调。 交互的两种方式: 1.直接抓取或者射线抓取物体,得到接触回调 2.射线或者手部触摸物体后,得到接触回调 我们需要准备好Unity工程和环境配置 有了前文:Unity之OpenXR+XR Inter

    2024年02月13日
    浏览(65)
  • Unity VR 开发教程 OpenXR+XR Interaction Toolkit (三) 转向和移动

    Unity VR 开发教程 OpenXR+XR Interaction Toolkit (三) 转向和移动

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

    2024年02月11日
    浏览(15)
  • Unity VR 开发教程 OpenXR+XR Interaction Toolkit (一) 安装和配置

    Unity VR 开发教程 OpenXR+XR Interaction Toolkit (一) 安装和配置

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

    2024年02月11日
    浏览(12)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包