跳转到正文

输入缓冲系统

介绍输入缓冲窗口定义、LastInput、Instant 与 HighestPriority 策略及并发关闭行为,并说明当前 HighestPriority 实现的优先级限制。

作

作者

作者

创建时间: 2025年4月08日更新时间: 2026年10月19日

目录

GIPS 的输入缓冲用于在当前输入权限拒绝输入时,先把指定标签和触发阶段保存在活动窗口中,再按窗口策略立即或在关闭时交给当前处理器链。它不替玩法系统定义连招、动作时长或动画通知。

定义窗口

在 UGIPS_InputConfig 的 InputBufferDefinitions 中为每个窗口配置 Tag、BufferType 和 AllowedInputs。每个允许输入可限定输入标签与 TriggerEvents;列表为空时允许该标签的任意触发阶段。窗口标签应唯一且有效。

三种窗口策略

BufferType

行为

LastInput

每个活动窗口保留最后一次匹配的输入;关闭该窗口时释放。

Instant

匹配的输入一到达就立即释放,并关闭所有活动窗口。

HighestPriority

设计意图是按 AllowedInputs 列表顺序选择优先级更高的输入,靠前项优先。当前源码实现存在偏差:后续匹配输入可能覆盖先前保存的项,因此暂不应依赖优先级选择。

窗口生命周期与并发

通过 OpenInputBufferWindow(WindowTag) 和 CloseInputBufferWindow(WindowTag) 管理窗口;窗口定义必须已存在于 InputConfig。组件支持多个不同标签的窗口同时活动,一次被拒绝的输入可以被多个允许它的活动窗口分别记录。

若关闭的窗口内有缓冲输入,GIPS 会直接把该输入交给释放时的当前 InputControlSetup 处理器链,不会重新运行权限检查器;释放后所有活动窗口都会关闭。关闭空窗口时只关闭指定窗口。StateTree 也提供 GIPS Buffer Window Scope、监听和等待相关任务。

输入何时进入缓冲

缓冲只发生在内部处理路径中:当前设定先拒绝输入,且 bEnableInputBuffer 已开启、活动窗口包含匹配的输入标签和阶段时,才会保存。权限通过的输入直接进入处理器;启用 bProcessingInputExternally 时会跳过检查和缓冲。

缓冲窗口本身没有持续时间字段,也没有由 GenericInputSystem 提供的 ANS_GCS_InputBufferWindow 动画通知。由项目逻辑、蓝图、动画流程或 StateTree 在适当时机调用开启与关闭 API。

使用建议

  • LastInput 适用于在窗口结束时执行最近一次预输入;Instant 适用于窗口内立即响应。
  • 让窗口只在玩法需要的时间段保持活动。注意:释放任意活动窗口中的缓冲输入会关闭全部活动窗口。
  • 如果需要严格的优先级语义,先修正或验证当前 HighestPriority 实现;目前可用 LastInput 或 Instant 表达已验证的行为。

相关页面

  • 输入控制设定:启用缓冲并配置允许输入的权限规则。
  • 输入系统组件:窗口 API、事件和值读取。
  • 快速上手与集成:创建并指派输入配置资产。
  • 调试指南:查看活动窗口和缓冲记录。