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

文章目录

  • [📕Unity XR 开发架构](#📕Unity XR 开发架构)
  • 📕OpenXR
  • [📕XR Interaction Toolkit](#📕XR Interaction Toolkit)
    • 🔍特点
    • [🔍XRI 能够实现的交互类型](#🔍XRI 能够实现的交互类型)
    • [🔍XR 交互参与的对象](#🔍XR 交互参与的对象)
    • [🔍XRI 中与交互相关的状态](#🔍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 状态
相关推荐
YY-nb1 小时前
Unity Apple Vision Pro 开发教程:物体识别跟踪
unity·游戏引擎·apple vision pro
Cool-浩1 小时前
Unity 开发Apple Vision Pro物体识别追踪ObjectTracking
unity·ar·apple vision pro·mr·物体识别·vision pro教程·objecttracking
向宇it13 小时前
【从零开始入门unity游戏开发之——C#篇23】C#面向对象继承——`as`类型转化和`is`类型检查、向上转型和向下转型、里氏替换原则(LSP)
java·开发语言·unity·c#·游戏引擎·里氏替换原则
Cool-浩21 小时前
Unity 开发Apple Vision Pro空间锚点应用Spatial Anchor
unity·游戏引擎·apple vision pro·空间锚点·spatial anchor·visionpro开发
吴梓穆1 天前
unity 最小后监听键盘输入
unity
一个程序员(●—●)1 天前
四元数旋转+四元数和向量相乘+音频相关
unity·游戏引擎
YY-nb1 天前
Apple Vision Pro 开发教程:通过 TestFlight 把开发的程序安装到其他的设备上测试
unity·apple vision pro
Ke-Di1 天前
Unity-URP设置单独渲染UI相机
ui·unity
冒泡P1 天前
【Lua热更新】上篇
开发语言·数据结构·unity·c#·游戏引擎·lua
十画_8241 天前
Unity 6 中的新增功能
unity·游戏引擎