Generic Input System 1.6
相对 1.5 的更新。这一版让 StateTree 直接管理输入权限和缓冲窗口,同时收紧两个含糊默认:组件必须挂在 Pawn 上,没有有效控制设置不再放行全部输入。升级是行为收紧。挂在 Controller 上或空着 setup 的项目,升级后会完全收不到输入。
新增
- 连招、受击和交互窗口可以用 StateTree 状态来开闭,不必在每个技能里手写压栈。
GIPS|Input节点可在状态生命周期内压入/弹出控制设置,以及开启、关闭、监听和等待缓冲窗口。 - C++ 和 StateTree 可以听到和蓝图同一套输入事件。 组件新增原生 multicast 委托。原有蓝图委托仍在。
- Mac 进入运行时平台。 启用本插件会同时启用 StateTree。本版本面向 Unreal Engine 5.8。
变更
- 输入组件只接受 Pawn Owner。 PlayerController / AIController 持有不再是「能挂上但绑定不完整」的中间态。StateTree 仍可从 Controller 解析到当前 Pawn,但组件本身必须在 Pawn 上。挂错位置时不会建立绑定。
- 空 setup 不再等于允许所有输入。
GetCurrentInputSetup()为空时返回 false 并 Warning。只把组件当事件总线的项目仍会收到广播,内部 Processor 不会跑。 - 坏的 Input Config 会在编辑器里直接报错,运行时不再
check崩溃。 无效 Tag、缺 Input Action、缓冲窗口定义不完整都会失败。空指针绑定改为 Warning 并跳过。 - 空 InputTags 的 Processor 现在匹配全部输入。 仍受 Trigger Event 过滤。以前靠空标签绕过校验、假装自己不参与的 Processor,升级后会接到所有输入。
- 关掉全部缓冲窗口时,监听方会收到每一个窗口的关闭。
CloseActiveInputBufferWindows以前只清空列表。依赖「批量关闭无事件」的动画或技能逻辑会重入。
修复
- 精确匹配开关真正生效。
ListenInputEvent的bExactMatch在 1.5 写在头文件里,实现没有赋值。默认仍是精确匹配。 - 取消异步监听时解绑正确的委托。 非缓冲监听不再误解绑缓冲事件,取消后也不会漏掉
Super::Cancel()。
移除
EGIPS_OwnerType不再保留。 Controller Owner 这条未完成路径直接删掉,而不是继续补 TODO。外部 C++ 引用该枚举会编不过。
升级说明
行为收紧。蓝图组件位置、Input Config、Processor 标签和监听关窗的逻辑必须核对。不改时最常见的结果是角色完全没有输入,或 Processor 突然吃到全部动作。
- 把
UGIPS_InputSystemComponent从 Controller 挪到受控 Pawn。 - 保证组件始终有有效的
UGIPS_InputControlSetup,不要再依赖「无 setup 即全部放行」。 - 打开现有 Input Config,按新的校验错误补齐 Tag 与 Input Action。
- 审查空
InputTags的 Processor,确认它们现在接到所有输入是你要的行为。 - 如果监听「关闭全部窗口」,按每个窗口都会收到关闭事件来改逻辑。
- 工程如果刻意关掉 StateTree,需要先处理这个硬依赖。