解释Input Action的交互(Interaction)与处理器(Processor)
解读
国内Unity面试中,Input System 是高频考点。面试官问“Interaction 与 Processor 区别”,并不是让你背定义,而是想确认三件事:
- 你是否真的用新 Input System 做过项目,而不是停留在旧 Input Manager;
- 能否把“输入响应逻辑”拆成可复用、可配置、可热更的模块;
- 是否理解“一次按键生命周期”里,Unity 到底在哪一步触发回调、在哪一步做数值映射。
答不到这三层,基本会被判“只看过文档”。
知识点
- Input Action 生命周期
监听→Interaction 评估→Processor 映射→事件派发 - Interaction(交互)
- 决定何时触发 Action(Press、Hold、Tap、SlowTap、MultiTap、Button)
- 运行在输入线程,每帧根据“Control 值 + 时间戳”做状态机推进
- 可自定义:继承 IInputInteraction,实现 Process、Reset,打包成 .dll 后无需改代码即可在编辑器里挂接
- Processor(处理器)
- 决定输出什么值给 Action 回调(AxisDeadzone、Scale、Invert、Clamp、StickDeadzone 等)
- 运行在主线程,在 Interaction 触发后、事件派发前执行
- 可自定义:继承 InputProcessor,通过 Editor 代码注册,支持热更(Addressable 或脚本化构建)
- 组合规则
- 一个 Binding 可挂多个 Processor,顺序执行;
- 一个 Action 可挂多个 Interaction,按优先级选第一个满足的;
- 若 Interaction 未触发,Processor 即使算完也不会产生事件。
答案
“Interaction 和 Processor 是 Input Action 管线里正交的两环:
Interaction 回答‘什么时候算一次有效输入’,它做时间/次数上的状态机判断,比如 Hold 要求按住 0.4 s 才触发;
Processor 回答‘把硬件读数变成什么值给逻辑层’,它做数值映射,比如把 0.1 以下摇杆值直接置 0 的 AxisDeadzone。
在项目中,我把 HoldInteraction 的时长暴露到 ScriptableObject,策划可热更调整手感;同时用 ScaleProcessor 把右摇杆输出 ×1.5,实现主机与 PC 的灵敏度差异,全程不改 C# 代码。”
拓展思考
- 网络同步场景:Interaction 触发时打时间戳,Processor 后再做输入回滚/预测,可避免“客户端手感不一致”。
- 移动端适配:给 TapInteraction 加“屏幕 DPI 系数”Processor,同样轻点力度在不同分辨率下输出一致。
- 自定义安全:继承 Interaction 时务必处理 Reset,否则切换场景会造成幽灵触发;Processor 内不要分配内存,防止GC 抖动。