输入系统
Kmax XR Core 从 2.7.0 起同时支持 Legacy Input Manager 和 Unity Input System。两种模块均通过 Unity Event System 提供触笔交互,并支持鼠标和触摸。Input System 是可选依赖,使用 Legacy 的项目无需安装它。
选择输入模块
| 项目配置 | 输入模块 | 说明 |
|---|---|---|
| Input Manager (Old) | KmaxInputModule |
继承 StandaloneInputModule。 |
| Input System Package (New) | KmaxInputSystemUIInputModule |
继承 InputSystemUIInputModule,需安装并启用 Input System。 |
| Both | 选择其中一个 | Both 表示两套输入后端可用,不表示需要同时添加两个 UI 输入模块。 |
启用 Input System
- 在 Package Manager 中安装与当前 Unity 版本兼容的 Input System(
com.unity.inputsystem)。Kmax 可选程序集的版本条件为 1.0.0 或更高。 - 打开 Edit > Project Settings > Player > Other Settings,将 Active Input Handling 设为 Input System Package (New) 或 Both,并按 Unity 提示重启编辑器。
- 选中
EventSystem,使用 Kmax > Convert to KmaxInputSystemUIInputModule。 - 检查模块的 UI Actions 引用和 Point、Click、Scroll 等绑定,确保原项目的自定义输入仍然有效。
- 导入并运行
input-system-sample,验证触笔、鼠标和触摸交互。
Unity 的安装与输入后端设置参见 Input System 安装说明。链接对应 1.14 文档,其他版本应切换到相应手册。
从旧模块迁移
Kmax > Convert to KmaxInputModule 是自动选择入口:启用新输入后端且 Kmax Input System 模块可用时,优先使用新模块;否则使用 Legacy 模块。
需要明确指定时,使用以下菜单:
- Convert to KmaxInputModule (Legacy):使用旧输入模块,要求旧输入后端可用。
- Convert to KmaxInputSystemUIInputModule:使用新输入模块,要求 Input System 已安装并启用。
转换操作会删除选中对象上的全部 BaseInputModule 组件,再添加目标模块。旧组件的自定义参数不会自动迁移;操作前应记录配置,必要时使用 Unity Undo 撤销。
拖拽与坐标修正
两种模块均提供 StylusDragThreshold,默认值为 20 像素,用于控制触笔开始拖拽前允许的移动距离。它与 EventSystem 的常规指针拖拽阈值分别配置。
新输入模块会为 Point Action 的绑定自动追加 kmaxInputPosition 处理器,以适配左右格式下的鼠标和触摸坐标,并在禁用时恢复原有覆盖设置。一般无需手动重复添加该处理器。
自定义交互可实现 Unity 的 IPointerClickHandler、IBeginDragHandler、IDragHandler 和 IEndDragHandler 等接口。触笔原始按键与射线进入/离开事件见常用接口。
排查输入异常
- 菜单不可用:检查是否选中了带
EventSystem的对象,以及 Input System 是否已安装并启用。 - 提示仍在读取
UnityEngine.Input:检查是否在仅启用新输入后端时保留了 Legacy 模块或旧版业务脚本。 - 触笔无法操作 UI:检查 Canvas 的 Event Camera、
KmaxUIRaycaster、控件射线检测设置和触笔检测层。 - 触笔无法拖拽物体:检查
Collider、拖拽组件及输入模块是否齐全。 - 交互重复或状态异常:检查是否存在重复的
EventSystem、输入模块或XRRig。