个人持续更新的 Unity VR 开发系列教程专栏(基于 OpenXR + XR Interaction Toolkit):
https://blog.csdn.net/qq_46044366/category_11656077.html
上面这个专栏主要介绍了 OpenXR + XR Interaction Toolkit 开发的一些常用功能。
而本专栏记录了我使用 XR Interaction Toolkit 的过程中遇到的一些疑惑点和我认为比较重要的知识点,相当于对上面这个专栏的补充说明,能让大家对 XR Interaction Toolkit 的功能和部分原理有个更深刻的理解。
XR Toolkit Interaction 官方文档:(选择自己正在使用的版本)
https://docs.unity3d.com/Packages/[email protected]/manual/index.html
在我们使用或添加 XR Interaction Toolkit 的一些组件时,会经常看到同样的组件会有两种版本,一种时后缀加 (Action-based) ,另一种是后缀加 (Device-based),如图所示:
然后我们可以看一下 XR Controller(Action-based) 和 XR Controller(Device-based) 在 Inspector 面板上的区别:
XR Controller(Action-based):
XR Controller(Device-based):
而在我写的系列教程中,使用的都是 Action-based 的组件,那么这两种版本到底有什么区别呢?
⭐⭐⭐
那么这就涉及到 Unity VR 中的两种输入系统:Input System 和 XR Input Subsystem
这两种系统在我写的 Unity VR 系列教程(基于 OpenXR + XR Interaction Toolkit)中的第二篇(手部动画)中有进行介绍(链接:Unity VR开发教程 OpenXR+XR Interaction Toolkit 2.1.1 (二) 手部动画,可以看编写脚本控制手部动画的那部分)
总结来说,XR Input Subsystem 是 Unity 为了给不同 XR 厂商的设备做适配,推出的一款处理 XR 中动作与物理设备(比如 VR 手柄上各种按键)之间映射关系的输入系统。Input System 是 Unity 新推出的通用输入系统,同样需要配置动作和物理设备的映射关系,比如指定“按下手柄的 Grip 键”时,触发的是“抓取”这个动作。
而 Device-based 对应的是 XR Input Subsystem
Action-based 对应的是 Input System
它们的区别是:(下面先用设备按键来指代物理设备)
比如我想按下手柄的 Trigger 键来进行抓握,可以直接在 Input Action Asset (Input System 里的功能)里对 Select 动作和设备按键的绑定进行更改。而 XR Input Subsystem 预先提供了几个按键配置,比如 “按下手柄的 Grip 键” 就是用 “Grip” 来表示,“按下手柄的 Trigger 键” 就是用 “Trigger” 表示,这些按键配置是无法修改的,我们只能在 XR Controller(Device-based)中的 Select Usage 中切换预先设定的按键配置。
Unity 官方推荐使用的是 Action-based 的版本,因为它的灵活性更高。