Unity XR Interaction Toolkit 开发教程(1):OpenXR 与 XRI 概述【3.0 以上版本】

文章目录

  • 📕Unity XR 开发架构
    • 🔍底层插件(对接硬件)
    • 🔍高层 SDK(面向应用交互层)
  • 📕OpenXR
  • 📕XR Interaction Toolkit
    • 🔍特点
    • 🔍XRI 能够实现的交互类型
    • 🔍XR 交互参与的对象
    • 🔍XRI 中与交互相关的状态

获取完整课程以及答疑,工程文件下载:
https://www.spatialxr.tech/

视频试看链接:https://www.bilibili.com/video/BV14pSbYsEPz

系列教程专栏:Unity XR Interaction Toolkit 系列教程(SDK 版本 3.0 以上)

📕Unity XR 开发架构

使用 Unity 开发 XR 应用的整体架构由底层插件和高层 SDK 组成。
在本套系列教程中,会使用 OpenXR + XR Interaction Toolkit 的开发方案。

🔍底层插件(对接硬件)

不同的底层插件对接对应的 XR 硬件平台,让 Unity 程序兼容到对应的硬件设备上,适配硬件的特性和用户的输入。

开发者通常只要在 Unity 的 XR Plug-in Management 中选择对应的 XR 插件供应商,然后进行设置,Unity 会自动处理程序与硬件的兼容,使得开发的应用能够成功接入设备的 XR 能力,在设备上正常运行。

例: OpenXR ,Apple visionOS,Oculus,Pico XR 插件

🔍高层 SDK(面向应用交互层)

将 XR 应用开发中的常用交互功能封装成模块给开发者使用。开发者会在开发流程中经常使用高层 SDK。

应用层的交互例如:抓取、UI 交互、MR 环境识别……

经典的高层 SDK:XR Interaction Toolkit,Meta XR SDK,PolySpatial,SteamVR SDK

📕OpenXR

在早期,不同的 XR 设备都维护着它们各自的 SDK,供开发人员制作出能在相应设备上运行的程序。但是尴尬的地方就在于,可能利用厂商 A 提供的 SDK 开发的程序无法兼容到厂商 B 的硬件设备上。不像如今已经比较成熟的安卓移动端,只需用 Android SDK开发一款程序,就能兼容到不同的安卓手机上。

而 OpenXR 就是为了简化 XR 开发而制定的一套标准。相当于在编写的 XR 应用程序和不同的硬件设备间新增了一个中间层,向上提供一套统一的开发 API,不同的开发引擎对该 API 进行二次封装,提供给 XR 应用开发者使用。而不同的设备厂商为硬件编写支持 OpenXR 标准的接口,使得中间层能够向下兼容对应的硬件设备。如今,越来越多的 XR 设备开始支持 OpenXR 标准,这意味着选用 OpenXR 进行 XR 设备的开发可以成为一种通用的方案。

有了统一的标准后只要编写一次代码,就能兼容所有的设备。这样开发者只要专注于程序开发本身,而不用在意设备间的差异

📕XR Interaction Toolkit

🔍特点

(1)简称 XRI

(2)Unity 推出的跨平台 XR 交互开发工具包,跨平台机制体现在以下几个方面:

  • 封装了通用的 XR 交互模块,如抓取、点触、射线、移动
  • 使用 Unity 的 Input System 处理不同平台的输入
  • 支持 OpenXR 标准(但是苹果不支持)`
  • 能结合 ARFoundation 开发 AR/MR 应用

(3)逐渐成为行业流行的标准,许多平台推行使用 XRI 作为交互开发包,结合自家 SDK(包括了硬件的特性),完成整套开发流程。

🔍XRI 能够实现的交互类型

  • 3D 物体交互:抓取物体,远距离操控物体,点击物体……
  • UI 交互:点击按钮,拖动滑动条……
  • 移动:持续移动,传送,攀爬……

🔍XR 交互参与的对象

Interactor:发起交互的对象

Interactable:被交互的对象

XRI 中通过 XR Interaction Manager 脚本统一管理场景中所有的 Interactor 和 Interactable

🔍XRI 中与交互相关的状态

Hover 悬停

  • 当 Interactor 接近 Interactable,准备进行交互的时候,会进入到 Hover 状态
  • 例:使用手柄射线点击 UI 按钮,当射线射到 UI 按钮上时,就进入到 Hover 状态,此时点击动作未发生,还未正式进行交互

Select 选中

  • 在进入到 Hover 状态的前提下,做出额外的输入动作发起交互,进入到 Select 状态
  • 例:使用手柄射线点击 UI 按钮,当射线射到 UI 按钮上时,进入到 Hover 状态,然后按下手柄的扳机键,相当于做出点击按钮的动作,进入到 Select 状态

Focus 获得焦点

  • 对象进入到 Select 状态时,同时也会处于 Focus 状态,直到再次选中 Interactable 或者选中另外一个 Interactable 或者明确不选择任何内容时退出 Focus 状态
  • 例:使用手柄抓取物体,手柄靠近物体时进入到 Hover 状态,然后按下手柄抓取键把物体抓起时会同时进入到 Select 和 Focus 状态,松开手柄抓取键结束抓取,会退出 Select 状态,但是不会退出 Focus 状态。重新抓起物体,才会先退出 Focus 状态,然后再同时进入新的 Select 和 Focus 状态。松开后单独按下手柄抓取键但不抓起物体,也能退出 Focus 状态(明确不选择任何内容)

Activate 激活

  • 在进入到 Select 状态的前提下,做出额外的输入动作可进一步对当前的交互对象进行交互
  • 例:用手柄抓取键拿起手枪,进入 Select 状态,然后按下手柄扳机键进行射击,进入 Activate 状态

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

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

相关文章

Diving into the STM32 HAL-----Interrupts

硬件管理就是处理异步事件。其中大部分来自硬件外围设备。例如,计时器达到配置的 period 值,或者 UART 在数据到达时发出警告。 中断是一个异步事件,它会导致按优先级停止执行当前代码(中断越重要,其优先级越高;这将导…

Linux中SPI

参考资料 https://www.cnblogs.com/aaronLinux/p/6219146.html1.SPI 2.SPI传输 2.1传输示例 首先,CS0拉低选中的SPI Flash , 然后在每个时钟周期, DO输出对应的电平。 SPI FLASH会在每个时钟的上升沿读取D0的电平。2.2SPI模式 根据SCK的电平以及数据在…

自旋锁--死锁

本文内容整理自B站视频教程 自旋锁定义 内核发生访问资源冲突的时候,可以有两种锁的解决方案选择:一个是原地等待,一个是挂起当前进程,调度其他进程执行(休眠)。 spinlock是内核中提供的一种比较常见的锁机制,自旋锁…

【C++】继承和多态常见的面试问题

文章目录 继承笔试面试题1. 什么是菱形继承?菱形继承的问题是什么?2. 什么是菱形虚拟继承?如何解决数据冗余和二义性?3. 继承和组合的区别?什么时候用继承?什么时候用组合? 选择题 多态概念考察…

数字IC开发:布局布线

数字IC开发:布局布线 前端经过DFT,综合后输出网表文件给后端,由后端通过布局布线,将网表转换为GDSII文件;网表文件只包含单元器件及其连接等信息,GDS文件则包含其物理位置,具体的走线&#xff1…

Python爬虫的“京东大冒险”:揭秘商品类目信息

开篇:欢迎来到Python的奇幻森林 在这个数据驱动的时代,我们就像一群探险家,穿梭在数字的森林中,寻找着隐藏的宝藏——商品类目信息。今天,我们将带领你一起,用Python这把锋利的剑,深入京东的神…

Flutter 13 网络层框架架构设计,支持dio等框架。

在移动APP开发过程中,进行数据交互时,大多数情况下必须通过网络请求来实现。客户端与服务端常用的数据交互是通过HTTP请求完成。面对繁琐业务网络层,我们该如何通过网络层架构设计来有效解决这些问题,这便是网络层框架架构设计的初…

Qt限制QGraphicsScene QGraphicsItem内部的移动范围

用过QGraphicsView的都知道,原点一般设定在view和item的中心,所以帮助文档和这个网友说的不一定跟我们对的上: 关于Qt限制QGraphicsScene内部Item的移动范围_qgraphicsitem限制移动范围-CSDN博客 首先,设定view的scenerect&…

【数据结构-邻项消除】力扣2211. 统计道路上的碰撞次数

在一条无限长的公路上有 n 辆汽车正在行驶。汽车按从左到右的顺序按从 0 到 n - 1 编号,每辆车都在一个 独特的 位置。 给你一个下标从 0 开始的字符串 directions ,长度为 n 。directions[i] 可以是 ‘L’、‘R’ 或 ‘S’ 分别表示第 i 辆车是向 左 、…

强网拟态的复现

web ez_picker 这题的考点 capoo Misc ezflag 这题涉及到kali的工具使用,binwalk或者formost 1.将压缩包拖进010,发现包含flag.zip文件,想到使用工具进行分离 命令:binwalk -e .... --run-asroot 分离流量包 得到一个文件&…

【Effective C++】阅读笔记2

1. 复制对象时要保证复制内容完整性 错误场景复现(没有复制基类部分) 如果一个类中包含多个成员变量或者继承了基类,那么在拷贝构造函数或者赋值运算符中,必须保证所有成员的基类部分被复制。 基类没有被复制,这样就都…

数组移除元素

目录 题目方法一:直接(暴力)求解法思路分析代码如下 方法二:双指针(快慢指针)思路分析代码如下 题目 这道题是来自于leetcode的一道算法题: 给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于…

【Flask】二、Flask 路由机制

目录 什么是路由? Flask中的路由 基本路由 动态路由 路由中的HTTP方法 路由函数返回 在Web开发中,路由是将URL映射到相应的处理函数的过程。Flask是一个轻量级的Web应用框架,提供了简单而强大的路由机制,使得开发者能够轻松…

【IC验证_systemverilog】信号类型

IC验证_systemverilog 1.信号声明2.变量类型3.数据类型4.符号 1.信号声明 语法: 变量类型 信号类型 符号转换 位宽 信号名 深度;2.变量类型 (1)说明: systemverilog中的信号类型主要分为线网类型(wire&a…

《模拟电子技术基础》第六版PDF课后题答案详解

《模拟电子技术基础》第六版是在获首届全国优秀教材建设奖一等奖的第五版的基础上,总结6年来的教学实践经验修订而成的新形态教材。为满足国家人才培养的需求,适应新型教学模式,并考虑到大多数院校逐渐减少课程学时的现状,在不降低…

DOM---鼠标事件类型(移入移出)

移入 移出mouseenter mouseleave 在父盒子上触发&#xff0c;在孩子盒子上不触发 移入 移出mouseover mouseout全触发 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Comp…

网络编程 UDP编程 Linux环境 C语言实现

UDP编程 1. 一般UDP编程 UDP传输特点&#xff1a;非面向连接、不可靠的、无序的 报式传输 支持组播和广播 UDP应用数据最大长度建议&#xff1a;MTU(以太网分组数据的最大长度)1500 - 20(IP头) - 8(UDP头) 1472Bytes 客户端&#xff1a;支持两种形式的代码编写: 1. 不定向…

在manjaro 2024里使用yay命令安装ROS2

不建议这么安装&#xff0c;研究了两天以失败告终。要不就手动编译吧。。。&#xff08;在系统环境良好的情况下&#xff0c;最好是刚装完系统就装ROS&#xff09;真的太多不适配了&#xff0c;旧有的很多yay包都会遇到一些奇怪的问题&#xff1a; 0.一开始就会遇到网络卡住的…

人工智能原理实验一:知识的表示与推理实验

一、实验目的 本实验课程是计算机、智能、物联网等专业学生的一门专业课程&#xff0c;通过实验&#xff0c;帮助学生更好地掌握人工智能相关概念、技术、原理、应用等&#xff1b;通过实验提高学生编写实验报告、总结实验结果的能力&#xff1b;使学生对智能程序、智能算法等有…

自研小程序-心情追忆

在近期从繁忙的工作中暂时抽身之后&#xff0c;我决定利用这段宝贵的时间来保持我的Java技能不致生疏&#xff0c;并通过一个个人项目来探索人工智能的魅力。 我在Hugging Face&#xff08;国内镜像站点&#xff1a;HF-Mirror&#xff09;上发现了一个关于情感分析的练习项目&…