解释Input Action的交互(Interaction)与处理器(Processor)

解读

国内Unity面试中,Input System 是高频考点。面试官问“Interaction 与 Processor 区别”,并不是让你背定义,而是想确认三件事:

  1. 你是否真的用新 Input System 做过项目,而不是停留在旧 Input Manager;
  2. 能否把“输入响应逻辑”拆成可复用、可配置、可热更的模块;
  3. 是否理解“一次按键生命周期”里,Unity 到底在哪一步触发回调、在哪一步做数值映射。

答不到这三层,基本会被判“只看过文档”。

知识点

  1. Input Action 生命周期
    监听→Interaction 评估→Processor 映射→事件派发
  2. Interaction(交互)
    • 决定何时触发 Action(Press、Hold、Tap、SlowTap、MultiTap、Button)
    • 运行在输入线程,每帧根据“Control 值 + 时间戳”做状态机推进
    • 可自定义:继承 IInputInteraction,实现 Process、Reset,打包成 .dll 后无需改代码即可在编辑器里挂接
  3. Processor(处理器)
    • 决定输出什么值给 Action 回调(AxisDeadzone、Scale、Invert、Clamp、StickDeadzone 等)
    • 运行在主线程,在 Interaction 触发后、事件派发前执行
    • 可自定义:继承 InputProcessor,通过 Editor 代码注册,支持热更(Addressable 或脚本化构建)
  4. 组合规则
    • 一个 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# 代码。”

拓展思考

  1. 网络同步场景:Interaction 触发时打时间戳,Processor 后再做输入回滚/预测,可避免“客户端手感不一致”。
  2. 移动端适配:给 TapInteraction 加“屏幕 DPI 系数”Processor,同样轻点力度在不同分辨率下输出一致。
  3. 自定义安全:继承 Interaction 时务必处理 Reset,否则切换场景会造成幽灵触发;Processor 内不要分配内存,防止GC 抖动