文章目录
- 📕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 状态