跳转到正文

输入控制设定

说明 UGIPS_InputControlSetup、Checker、Processor 与处理顺序,帮助按当前设定组织标签化输入权限。

作

作者

作者

创建时间: 2025年3月24日更新时间: 2026年10月19日

目录

UGIPS_InputControlSetup 是数据资产,用来定义当前输入的权限校验、输入缓冲开关和处理器链。组件可持有多个设定;数组最后一项是当前生效设定。

按状态切换设定

通过 PushInputSetup(NewSetup) 将设定压入组件栈,恢复时调用 PopInputSetup()。重复压入已在栈中的同一资产不会再次添加;PopInputSetup() 在栈只剩一项时不做操作,因此应保留默认设定。StateTree 的 GIPS Input Setup Scope 可在状态进入时压入、退出时弹出。

权限校验顺序

  1. 若 InputCheckers 为空,输入通过校验。
  2. 若输入匹配 AlwaysAllowedInputs 的标签和触发阶段,则绕过所有检查器;其中触发阶段列表为空表示任意阶段。
  3. 其余输入依次经过检查器。所有非空检查器都必须返回允许;任一检查器拒绝,输入就未通过。
  4. 未通过时,只有当前设定启用了 bEnableInputBuffer 且活动窗口允许该输入标签与阶段,才会尝试缓冲;否则记录为阻止。

标签关系检查器

UGIPS_InputChecker_TagRelationship 默认通过实现 IGameplayTagAssetInterface 的 Pawn 读取 Actor Gameplay Tags。它只评估 ActorTagQuery 非空且匹配的关系:若该关系设置了 AllowedInputs,当前标签和阶段必须在列表内;匹配 BlockedInputs 则拒绝。多个匹配关系都可能约束同一输入。

如果标签来自 Ability System Component,且 Pawn 本身没有暴露这些标签,可派生检查器并覆盖 GetActorTags。自定义检查器通过 DoCheckInput 返回允许或拒绝,不应在校验器里执行移动、攻击等玩法行为。

处理器链

通过权限校验后,组件按 InputProcessors 的数组顺序筛选处理器。InputTags 为空表示匹配所有标签,否则按精确标签匹配;TriggerEvents 必须包含当前阶段,默认只包含 Started。处理器还会调用 CheckCanHandleInput 决定是否处理。

  • MatchAll:按数组顺序执行所有通过 CheckCanHandleInput 的处理器。
  • FirstOnly:执行第一个通过 CheckCanHandleInput 的处理器,然后停止。

自定义处理器可分别实现 CheckCanHandleInput 与对应阶段的处理事件(如 HandleInputStarted、HandleInputTriggered、HandleInputOngoing、HandleInputCanceled、HandleInputCompleted)。让 Checker 负责“能不能输入”,Processor 负责“输入后做什么”。

调试设置

设定中的 bEnableInputDebug 可开启权限检查日志;DebugInputTags 和 DebugTriggerEvents 可缩小范围,列表为空时不按该字段过滤。更完整的日志和记录查看方式见调试指南。

相关页面

  • 快速上手与集成:创建并指派配置资产。
  • 输入系统组件:事件分发、值读取和外部处理。
  • 输入缓冲系统:缓冲窗口策略和释放行为。