Unity XR实现交互(抓取、移动、旋转、传送、射击)-Pico

这篇具有很好参考价值的文章主要介绍了Unity XR实现交互(抓取、移动、旋转、传送、射击)-Pico。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

unity xr pico手柄控制,unity3d,unity,xr,交互

Unity XR 支持交互(抓取、移动、旋转、传送、射击)

文章目录

前言

Unity XR 提供了 XR 交互工具包,可以直接在包管理器中安装/更新。对于简单的交互需求unity 射线碰撞检测,可以实现0代码贴图笔刷,只需要在句柄和对象上挂载相应的脚本即可。此演示使用最新的 2.1.0 预览版。如果版本较低,某些脚本可能不可用。请尽可能更新到最新版本。

此演示使用 Pico XR SDK。导入SDK后会自带一个0.9版本的XR交互工具包。请从包管理器中更新,否则后面的选项会相差较大。

PS:更新到新版本后,很多脚本提供了新版本的Action-based方法和旧版本的Device-based。本博客将解释基于设备的版本。关于新版Unity输入系统的使用,笔者将在下面讨论。有一篇文章重点介绍它。

一、创建句柄

unity xr pico手柄控制,unity3d,unity,xr,交互

二、手柄抓取1.XR DirectController直接抓取手柄

unity xr pico手柄控制,unity3d,unity,xr,交互

2. XR 射线交互器处理射线抓取

手柄射线抓取一般使用默认设置将被击中的物体吸到手柄上,不添加碰撞体。图层蒙版等属性同上,不再赘述。

3.XR Grab 可交互

unity xr pico手柄控制,unity3d,unity,xr,交互

三、操纵杆控制移动和旋转

以左摇杆控制连续旋转,右摇杆控制连续移动为例unity xr pico手柄控制,unity3d,unity,xr,交互

 

根据上图,在XR Origin上添加Locomotion System、Continous Turn Provider等组件,然后按照上图箭头进行配置。

四、手柄射线传输1.基础版

unity xr pico手柄控制,unity3d,unity,xr,交互

unity xr pico手柄控制,unity3d,unity,xr,交互

unity xr pico手柄控制,unity3d,unity,xr,交互

unity xr pico手柄控制,unity3d,unity,xr,交互

除了射线手柄的设置外,还需要在地面上添加Teleportation Area脚本才能进行瞬移(如果只想瞬移到固定点,可以使用Anchor,用法同上) ,然后射线会探测到可以传送的地面。变为绿色,默认按下触发键实现瞬移。

2. 高级版

改进

只挂载默认脚本,有时很大程度上不能满足需求。例如,一般控制器的瞬移功能并不总是有曲线来选择位置。我们希望在按下按钮或按下操纵杆时出现曲线旋转位置,在松开按键或操纵杆时发生瞬移等。

负责传输的句柄不能同时挂载Ray Interactor和Direct Interactor。也就是说,我们无法实现handle通常只通过挂载脚本就负责直接抓取,而当我们要传输的时候,就可以得到光线选择位置传输。

对于问题1和2的场景,作者给出了一个解决方案,以左手柄通常负责直接抓取,按A键出现传输光线选择位置为例。

基本思路

创建两个左手柄对象unity 射线碰撞检测,一个安装 Direct Interactor 用于日常抓取,一个安装 Ray Interactor 用于交付。通常Ray Interactor脚本会被禁用,只有当A键被按下时启用位置选择,当A键被释放时,代码控制传送请求的发送,然后禁用脚本指示器等。

关于按下和抬起手柄按钮的Down和Up事件,如果你使用旧的输入系统,可以参考这篇文章。启动和禁用脚本的过程比较简单。以下仅显示按钮解除时的传输请求。代码。

    //传送管理器脚本的获取省略
	public TeleportationProvider provider;
	//负责传送的手柄XRRayInteractor脚本,获取过程省略
	public XRRayInteractor teleportRayInteractor;
	private void LeftAXButtonUpHandler()
    {
        //射线信息
        RaycastHit rayInfo;
        //判断目标点是否有效 1.是否击中目标 2.是否具有Teleportation组件
        bool isValid = teleportRayInteractor.TryGetCurrent3DRaycastHit(out rayInfo);
        isValid = isValid && rayInfo.collider != null &&
                  (rayInfo.collider.GetComponent<TeleportationArea>() != null ||
                   rayInfo.collider.GetComponent<TeleportationAnchor>() != null);
        if (isValid)
        {
            //创建传送需求将射线击中的位置作为目的地,提交到provider中的传送队列。
            TeleportRequest request = new TeleportRequest();
            request.destinationPosition = rayInfo.point;
            provider.QueueTeleportRequest(request);
        }
        
        //禁用相关脚本和指示器
        teleportRayInteractor.enabled = false;
        teleportRayInteractor.GetComponent<XRInteractorLineVisual>().reticle?.SetActive(false);
    }

五、手柄控制射击

在VR游戏中,经常会有拿起枪射击的功能,其总体设计难度为

判断物体是否被抓取,哪个手柄抓取了物体以及抓取物体的手柄是否按下了触发键

XR Grab Interactable脚本中已经贴心地提供了一个事件,触发条件就是上面两个。使用如下文章来源地址https://www.toymoban.com/news/detail-781666.html

private XRGrabInteractable grab;
private void Awake()
{
    grab = GetComponent();
    //为activated事件添加监听函数即可
    grab.activated.AddListener(GrabHandler);
}
private void GrabHandler(ActivateEventArgs a)
{
	//当枪械被抓取和按下Trigger后回调此方法,触发射击方法。
    Shoot();
}

到了这里,关于Unity XR实现交互(抓取、移动、旋转、传送、射击)-Pico的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • Unity之OpenXR+XR Interaction Toolkit实现 UI交互

    在VR中我们经常会和一些3D的UI进行交互,今天我们就来说一下如何实现OpenXR+XRInteraction Toolkit和UI的交互。 我们需要准备好Unity工程和环境配置 有了前文:Unity之OpenXR+XR Interaction Toolkit基本配置的介绍,我们就不在详细说明这些了,大家自行复习。 流程简述: 我们新建一个3D(U

    2024年02月16日
    浏览(39)
  • 从零开始的PICO开发教程(4)-- VR世界 射线传送、旋转和移动

    在开发VR游戏的时候, 第二个要解决的就是移动和转向问题 ,该专题将详细解析如何在VR世界中实现这些功能。 1、大纲 经过该教程你将学会 如何用 扳机键 或握把键(任君选)进行 地区传送和锚点传送 如何 通过左摇杆/右摇杆 转动画面 如何 通过摇杆在场景中移动 初步熟

    2024年02月05日
    浏览(64)
  • Unity之OpenXR+XR Interaction Toolkit实现 射线和物体交互事件回调

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

    2024年02月13日
    浏览(74)
  • Unity实现人物旋转+移动

    思路:首先要有个变量去记录下操作前的一个方向状态。(本次操作的对象是正面对着屏幕的。)然后还有有个变量去描述将要发生的方向。接着要明确,前和后,左和右是横跨180°的,其他的两两是相差90°的。所以我们可以以90°一个单位去做旋转。并且利用前面总结的方向

    2024年02月14日
    浏览(41)
  • Unity实现人物移动、旋转、跳跃

    1.Player脚本控制人物移动,可单独使用。(人物需添加组件 Box   Collider和Rigidbody ) 2.相机放在人物头部,转动需要带着人物转,相机转动灵敏度和上下转动角度范围根据具体情况配置。 脚本CameraController和Player直接挂载到人物就可以用了。 3. 文件目录(人物final bowser fly,相

    2024年02月04日
    浏览(37)
  • Blender基础操作:移动、旋转、缩放、删除、抓取、复制

    1. 物体的移动 微调面板:Adjust last operation:对上一步操作进行微调 2.物体旋转与缩放 快速归位 几个快捷键 ALT+G 坐标归零 ALT+R 旋转归零 ALT+S 缩放归零 3.删除、抓取、复制 快捷键x:确认后删除 (视图不能缩放处理方法:选择视图》对齐视图》游标居中并查看全部/视图中心对

    2024年02月11日
    浏览(50)
  • 实现3D人物的移动和旋转。(Unity)

    首先,需要在人物身上加刚体和碰撞器。   如果需要人物身上有声音,可以添加AudioSource音频源。  然后创建脚本,需要把脚本挂载到对应的对象身上。 如果有动画,还需要创建状态机添加到对应的对象上面,并且设置好里面的动画。  代码实现: 图片实现:     上面代码

    2024年02月04日
    浏览(67)
  • Unity摄像机旋转与移动脚本实现

            最近做项目经常用到需要控制摄像机的地方,查阅了网上的方法后,以自己的需要写了一个这样的功能。希望对码友有所帮助        (本脚本放在摄像机上)         摄像机脚本功能:           1、通过键盘的WASD键控制摄像机的前后左右移动           2、通过

    2024年02月13日
    浏览(42)
  • 计算机图形学,OpenGL编写的一个可实现旋转缩放移动的房间,内有数十种交互

    #include stdlib.h #includestdio.h #includewindows.h #include GL/glut.h #include math.h #include gl/GLU.h //颜色宏定义 #define white 1.0f, 1.0f, 1.0f #define black 0.0f, 0.0f, 0.0f #define red 1.0f, 0.0f, 0.0f #define blue 0.0f, 0.0f, 1.0f #define skyBlue 135.0/255.0, 206.0/255.0, 1.0f #define plum 1.0f, 187.0/255.0, 1.0f //浅紫色 #define pink 1.0f, 1

    2024年04月17日
    浏览(63)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包