Table of Contents

输入系统

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

  1. Package Manager 中安装与当前 Unity 版本兼容的 Input Systemcom.unity.inputsystem)。Kmax 可选程序集的版本条件为 1.0.0 或更高。
  2. 打开 Edit > Project Settings > Player > Other Settings,将 Active Input Handling 设为 Input System Package (New)Both,并按 Unity 提示重启编辑器。
  3. 选中 EventSystem,使用 Kmax > Convert to KmaxInputSystemUIInputModule
  4. 检查模块的 UI Actions 引用和 Point、Click、Scroll 等绑定,确保原项目的自定义输入仍然有效。
  5. 导入并运行 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 的 IPointerClickHandlerIBeginDragHandlerIDragHandlerIEndDragHandler 等接口。触笔原始按键与射线进入/离开事件见常用接口

排查输入异常

  • 菜单不可用:检查是否选中了带 EventSystem 的对象,以及 Input System 是否已安装并启用。
  • 提示仍在读取 UnityEngine.Input:检查是否在仅启用新输入后端时保留了 Legacy 模块或旧版业务脚本。
  • 触笔无法操作 UI:检查 Canvas 的 Event Camera、KmaxUIRaycaster、控件射线检测设置和触笔检测层。
  • 触笔无法拖拽物体:检查 Collider、拖拽组件及输入模块是否齐全。
  • 交互重复或状态异常:检查是否存在重复的 EventSystem、输入模块或 XRRig