输入缓冲系统
“输入缓冲系统”是战斗类游戏中的常见需求,本框架也提供了对它的支持。
简单来说,通过配置输入缓冲,它能让你更容易实现分支连招效果,类似下图:

输入缓冲一般用于延迟输入响应,比如连招。
定义输入缓冲区窗口
在输入配置(InputConfig)上定义输入缓冲区窗口,这里定义的是所有可用的输入窗口。

你可以定义多个输入缓冲区窗口,每一个窗口与一个GameplayTag关联,每一个窗口可以定义允许哪些输入(包括其事件类型)被缓冲,以及这些输入的优先级,和缓冲输入的触发方式。
缓冲输入的触发方式有三种:
LastInput | 在窗口期间,最后一个按下的可被允许的输入,会在窗口期结束后触发该输入事件。它时默认方式。 |
HighestPriority | 在窗口期间,只会记录任意输入中最高优先级的那个可缓冲输入,然后在窗口期结束后触发该输入。 |
Instant | 在窗口期间,任意一个可悲允许的输入事件发生,就立刻触发,并提前关闭窗口。 |
不同的触发方式,可以为你的游戏带来不同的感觉、以及更多样的机制变化。下面是一个连招在触发方式分别为Instant和LastInput时的效果。
Instant方式:

LastInput方式:

放置输入缓冲动画通知
动画状态通知:ANS_GCS_InputBufferWindow
你可以在动画Montage上放置该动画状态通知来控制缓冲窗口的开启/关闭。

在攻击完毕后的一段时间开启了名为“InputBuffer.Combo”的输入缓冲区窗口,该窗口允许接收战斗相关的其他输入(连招输入,Dodge等)。
在非Instant方式下,动画状态通知结束时,才会触发缓存的输入(如果有)。
如果多个输入缓冲区窗口产生重叠,那么只要有缓存的输入被触发,则会清空所有激活的输入缓冲区。
输入缓冲流程
输入缓冲机制与InputChecker配合使用,任何当前不被允许的输入,都会进入输入缓冲流程。
它的具体流程如下:
- 任何输入事件发生时,先通过InputChecker进行前置判定,用于决定该输入是否允许。
- 如果输入不被允许,则查询当前是否有激活的缓冲窗口,如果有激活窗口且该窗口允许当前的输入,则可以成功缓冲该输入。
- 缓冲的输入,在触发时,不再进行InputChecker而是直接执行该输入所关联的输入处理器。