Unity VR 开发教程 OpenXR+XR Interaction Toolkit(八)手指触控 Poke Interaction

news2024/11/17 3:52:55

文章目录

  • 📕教程说明
  • 📕XR Poke Interactor
  • 📕与 UI 进行触控交互
    • ⭐添加 Tracked Device Graphic Raycaster 和 XR UI Input Module 让 UI 可被交互
  • 📕与物体进行交互
    • ⭐XR Simple Interactable
    • ⭐XR Poke Filter

在这里插入图片描述

往期回顾:
Unity VR 开发教程 OpenXR+XR Interaction Toolkit (一) 安装和配置
Unity VR 开发教程 OpenXR+XR Interaction Toolkit (二) 手部动画
Unity VR 开发教程 OpenXR+XR Interaction Toolkit (三) 转向和移动
Unity VR 开发教程 OpenXR+XR Interaction Toolkit (四) 传送
Unity VR 开发教程 OpenXR+XR Interaction Toolkit (五) UI
Unity VR 开发教程 OpenXR+XR Interaction Toolkit (六)手与物品交互(触摸、抓取)
Unity VR 开发教程 OpenXR+XR Interaction Toolkit(七)射线抓取

在 VR 交互中,手指触控也是一种常见的交互方式,比如直接用手指去戳按钮、用手指滑动 UI 等。这种交互方式用英文表示就是 Poke Interaction。XR Interaction Toolkit 从 2.3.0 版本开始增加了对 Poke 功能的支持。这篇教程,我将介绍一下如何实现 Poke Interaction。


📕教程说明

使用的 Unity 版本: 2021.3.5

使用的 VR 头显: Oculus Quest 2

教程使用的 XR Interaction Toolkit 版本:2.3.2(此教程尽量考虑了向上兼容,如果有过期的地方,欢迎大家指出)

项目源码(持续更新):https://github.com/YY-nb/Unity_XRInteractionToolkit2.3.2_Demo

前期的配置:环境配置参考教程一,手部模型参考教程二,手部模型的动画使用这篇教程(Unity VR 开发教程 OpenXR+XR Interaction Toolkit 番外(一)用 Grip 键, Trigger 键和摇杆控制手部动画)中的配置,也就是当玩家按下手柄的 Trigger 键时,手部会呈现出食指向前指的姿态,以便对其他物体进行触控交互。本篇教程的场景基于上一篇教程搭建的场景进行延伸,也就是沿用了之前教程里所配置的移动、抓取、用射线与 UI 进行交互等功能。

最终实现的效果:

在这里插入图片描述

在这里插入图片描述


📕XR Poke Interactor

交互包含了发起交互的对象(Interactor)和可被交互的对象(Interactable)。XR Interaction Toolkit 为我们提供了一个 XR Poke Interactor 脚本,用于实现 Poke 功能。

首先,我们回顾一下 XR Origin 当前的层级(沿用了上一篇教程):

在这里插入图片描述

类似的,我们分别在 LeftHand Controller 和 RightHand Controller 物体下创建一个空物体,名为 Poke Interactor:

在这里插入图片描述

然后在 Poke Interactor 物体上添加 XR Poke Interactor 脚本:

在这里插入图片描述

组件每个参数的详细介绍可以参考官方文档:https://docs.unity3d.com/Packages/com.unity.xr.interaction.toolkit@2.3/manual/xr-poke-interactor.html

接下来,我们设置 XR Poke Interactor 中的 Attach Transform,这个东西相当于 Interactor 和 Interactable 发生交互的地方。对于手指触控来说,交互点位于食指的指尖处比较合适,比如想要用手指去点击按钮进行交互,当指尖戳向按钮的时候,就相当于发生了 Poke 触控交互。因此,我们在手部模型下创建一个子物体代表交互点,然后设置它的位置,如下图中的 Poke Point 所示:

在这里插入图片描述

然后将 Poke Point 物体拖至 XR Poke Interactor 脚本中的 Attach Transform 处:

在这里插入图片描述

现在,Poke Interactor 已经配置成功了。不过如果手部拥有其他的 Interactor,如下图所示,我们可以在 LeftHand Controller 和 RightHand Controller 上的 XR Interaction Group (前两篇抓取教程中配置的)中添加 Poke Interactor,这样当其中一个 Interactor 起作用的时候,其他的 Interactor 会暂时失效,保证只有一个 Interactor 在发挥作用,比如我在点击 UI 按钮的时候不希望手部射线与 UI 也发生交互。

在这里插入图片描述

📕与 UI 进行触控交互

⭐添加 Tracked Device Graphic Raycaster 和 XR UI Input Module 让 UI 可被交互

为了让 UI 能够被交互,需要在场景中添加一些脚本,这部分的配置和这篇教程:Unity VR开发教程 OpenXR+XR Interaction Toolkit (五) UI 中的配置是一样的。简单来说,就是在 Canvas 上添加 Tracked Device Graphic Raycaster 脚本,在 EventSystem 上添加 添加 XR UI Input Module 脚本。

在这里插入图片描述

在这里插入图片描述

现在运行程序,应该可以看到效果了:

在这里插入图片描述

📕与物体进行交互

这里演示一个最简单的功能:食指去戳物体的时候,让物体变色,食指离开物体后,物体的颜色复原。

⭐XR Simple Interactable

我这里用一个红色方块来代表可交互的物体,在方块上添加 XR Simple Interactable 脚本:

在这里插入图片描述

在这里插入图片描述

然后在 XR Simple Interactable 的 Interactable Events 中添加事件。我这边在 Select Entered 的时候让方块材质变成黄色,在 Hover Exited 的时候让方块的材质变成原来的红色,当手指戳入方块时,触发 Select Entered 事件;当手指取消悬停,也就是差不多离开方块的时候触发 Hover Exited 事件。这里选择 Hover Exited 事件而不是 Select Exited 的事件是因为经过测试, Hover Exited 的效果会更好,Select Exited 容易误触发。

在这里插入图片描述

现在,我们已经配置好了 Poke 所需要的 Interactor 和 Interactable。但是因为 XR Simple Interactable 默认也会被其他的 Interactor 触发,而我们的 LeftHand Controller 和 RightHand Controller 下有多个 Interactor,这会造成手靠近方块时按下手柄 Grip 键也会触发 Select Entered 事件,也就是 XR Direct Interactor 与 Interactable 发生了交互,因为 XR Direct Interactor 对应的 Select Action 绑定了 “按下 Grip 键的操作”。

为了解决这个问题,其中一个思路是将 XR Poke Interactor 上的 Interaction Layer Mask 和方块挂载的 XR Simple Interactable 上的 Interaction Layer Mask 设为同一个层级,这样其他不同层级的 Interactor 就不会与方块的 Interactable 发生交互。

在这里插入图片描述
在这里插入图片描述

但是经过测试,XRI 2.3.2 的版本下,Poke Interactor 的 Interaction Layer Mask 如果和 Interactable 设置成一样的,则无法触发 Poke 交互。这个大家可以自己测试一下,也欢迎大家和我进行反馈。但是,如果我为 XR Simple Interactable 的 Interaction Layer Mask 单独设置一个层级(我这里设置成了 Poke),然后 XR Poke Interactor 的 Interaction Layer Mask 设置成了 Everything,则可以成功地让 Poke Interactor 单独和方块进行交互。

在这里插入图片描述

⭐XR Poke Filter

但是如果我们这时候运行程序,会发现无法触发 Poke 。这是因为我们的 XR Poke Interactor 默认勾选了 Require Poke Filter:

在这里插入图片描述

这样,能够发生 Poke 交互的物体就必须拥有 XR Poke Filter 组件。所以,我们还需要在方块上添加 XR Poke Filter 组件,它能对 Poke 的触发条件做一些过滤(官方文档:https://docs.unity3d.com/Packages/com.unity.xr.interaction.toolkit@2.3/manual/xr-poke-filter.html):

在这里插入图片描述

组件上有个 Poke Configuration 可以调整一些参数,我这边把 Poke Direction 设为了 Negative Y,也就是手指从上往下触碰方块的时候可以触发 Poke。

现在运行程序就可以看出效果了:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/711765.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

偏爱console.log的你,肯定会觉得这个插件泰裤辣!

前言 毋庸置疑,要说前端调试代码用的最多的,肯定是console.log,虽然我现在 debugger 用的比较多,但对于生产环境、小程序真机调试,还是需要用到 log 来查看变量值,比如我下午遇到个场景:选择完…

单片机-串口通信

1.串口向电脑发送数据 1.配置串口 T1定时器,方式二8位重装 void UartInit(void) //4800bps11.0592MHz {PCON & 0x7F; //波特率不倍速SCON 0x50; //8位数据,可变波特率TMOD & 0x0F; //清除定时器1模式位TMOD | 0x20; //设定定时器1为8位自动重装方式…

Win11桌面右键菜单怎么变成老版本?

Win11桌面右键菜单怎么变成老版本?Win11系统带来了许多新的功能和改进,其中一个显著的变化是Win11桌面右键菜单的设计和布局,所以有些用户就想把Win11桌面右键菜单变成老版本,那具体怎么操作,可以按照以下小编分享的方…

chatgpt赋能python:用Python关机:简单、快捷、高效的关机方式

用Python关机:简单、快捷、高效的关机方式 介绍 在我们使用计算机的日常生活中,关机是必不可少的一个要素。传统的关机方式通常是通过点击“开始”菜单——“关机”按钮来完成的。但是,使用Python可以让我们更加方便和高效地完成关机操作。…

海外媒体发稿:海外新闻发表文章的必要性

海外新闻发表文章,是指国外企业在当地新闻媒体上发表企业信息和企业企业形象活动,通过专业媒体网络资源,依靠技术专业的报道发稿平台,让国外企业迅速、精确、低成本开展海外新闻稿子的出台,根据媒体报导,提…

PyQt5入门1——PyQt5的安装与Hello World应用

PyQt5入门1——PyQt5的安装与Hello World应用 学习前言简介(From 百度百科)安装Hello World1、窗口构建a、构建基础类b、编写UI 2、主程序运行 全部代码 学习前言 搞搞可视化界面哈,虽然不一定有用,但是搞一下。 简介&#xff…

Makefile实战

文章目录 1、准备环境1.2、规则1.3、假目标1.4、变量1.5、自动变量1.6、函数addprefix 函数filter函数filter-out函数patsubst函数strip函数wildcard函数 1、准备环境 准备一台Linux机器,验证环境中是否呗正确安装了,使用make -v命令进行验证 1.2、规则 …

React中useState的setState方法请求了好多次

1、问题描述 最近在写react的时候碰到了一个很奇怪的问题。 可以看到那个getXXX()的方法一直不断的被调用,网页一直请求,根本停不下来了。 2、产生原因 要弄明白这个原因,首先要先了解一下react生命周期。 react是组件式的编程,一…

青岛大学_王卓老师【数据结构与算法】Week04_01_循环链表_学习笔记

本文是个人学习笔记,素材来自青岛大学王卓老师的教学视频。 一方面用于学习记录与分享,另一方面是想让更多的人看到这么好的《数据结构与算法》的学习视频。 如有侵权,请留言作删文处理。 课程视频链接: 数据结构与算法基础–…

GO SDK使用说明

简介 欢迎使用腾讯云开发者工具套件(SDK)3.0,SDK 3.0 是云 API 3.0 平台的配套工具。SDK 3.0 实现了统一化,各个语言版本的 SDK 具备使用方法相同、接口调用方式相同、错误码和返回包格式相同等优点。本文以 GO SDK 3.0 为例&…

chatgpt赋能python:用Python编写BMI计算器,实现身体指数(BMI)的快速计算和分析

用Python编写BMI计算器,实现身体指数(BMI)的快速计算和分析 在当今的健康意识逐渐增强的时代,身体指数(BMI)成为了一个非常重要的健康指标。BMI是根据身高和体重计算出来的数值,用于评估一个人…

java pdf2html 和html2pdf 两款插件

1 pdf2html docker 启动,java 调用服务即可转化 https://beltxman.com/2567.html docker run -ti --rm -v ~/pdf:/pdf -w /pdf docker.io/pdf2htmlex/pdf2htmlex:0.18.8.rc2-master-20200820-ubuntu-20.04-x86_64 test.pdf 2 html2pdf java .Runtime 类型调用命…

超详细讲解在Ubuntu 20.04上安装ROS Noetic Ninjemys并测试

文章目录 前言安装STEP-1: 配置Ubuntu软件仓库STEP-2: 设置sources.listSTEP-3: 设置密钥STEP-4: 更新Ubuntu软件包确保安装索引是最新的STEP-5: 执行安装命令STEP-6: 配置ROS环境 测试ROS 前言 ROS是Robot Operating System的缩写, 即机器人操作系统, ROS是一组软件库和工具&…

LR录制https协议脚本前配置

LR录制https安全协议脚本前的设置 在IE中添加安全证书 打开IE浏览器,选择“工具—Internet选项—内容”,点击“证书”导入相应的证书,如下图 在LR中配置证书 获取pem格式证书 因为loadrunner只支持pem格式的证书,所以要将证书…

uniapp监听手机侧滑返回事件。

这篇文章是应一个粉丝的需求更新的!你们看我多宠粉! 若在App首页,点击手机物理返回键,此时无返回页面可关闭,uni-app默认会提示“再按一次退出应用”;若想自定义退出信息,如修改为:…

Arthas (阿尔萨斯)arthas-boot 方式安装及使用教程

目录 一、软件介绍二、下载教程三、安装教程四、使用教程 一、软件介绍 Arthas 地址:https://github.com/alibaba/arthas 官方文档:https://alibaba.github.io/arthas Arthas 是Alibaba开源的Java诊断工具,深受开发者喜爱。 当你遇到以下类…

ProGuard 进阶系列(四)访问者模式

在进行后面的内容分析之前,不得不讲到访问者模式,这是 GOF 23 个设计模式中最难的几个模式之一。如果能够很好的理解访问者模式, 后续源码解读会相对容易一些。本文将结合 ProGuard 的部分源码,理解分析访问者模式的用途及使用场景…

单相逆变原理验证仿真

为了用全桥控制一个电感中的电流跟踪指令电流,simulink图如下图1: 图1 前向通道传递函数,闭环伯德图如下: s tf(s); %LC及并联电阻R的值 L1*10^-3; R10; %调制限号到占空比的传递函数,dVcont/Vramp -> d/Vcont 1/Vramp1Kcd …

JavaWeb 笔记——1

JavaWeb 笔记-1 初始JavaWeb什么是JavaWeb 一、JDBC1.1、JDBC简介1.2、API详解-DriverManager1.3、API详解-Connection1.4、API详解-Statement1.5、API详解-ResultSet1.6、API详解-PreparedStatement1.6.1、API详解-PreparedStatement-SQL注入演示1.6.2、API详解-PreparedState…

NR PDCP(二) format/parameters

这篇主要是PDCP PDU,PDCP Formats及其参数的含义, 收发过程中用到的变量,常量和定时器的总结,都是概念性描述。 PDU 和RLC 类似,PDCP PDU 也分为data pdu 和control PDU。PDCP data PDU 的data field对应的是user pla…