Input · Handler 与能力分派

选择正确的输入阶段,把输入交给移动、GAS、GameplayEvent 或 UI,保持共享 Handler 无玩家状态。

本页内容6 节

Handler 是共享配置对象

Setup 中的 InputHandlers 直接引用资产内对象,Instanced 表示可在资产内编辑,不表示运行时按玩家复制。不要在 Handler 成员中保存当前玩家、按住计时、目标 Actor,或启动依赖本对象身份的 latent 流程。

处理时从传入 Manager 取得当前上下文,把持续状态放到所属组件、技能或本次任务。Manager 会在同步调用前设置当前 World,这也不构成独立玩家实例。

先选对事件

Enhanced Input 阶段常见含义Handler 覆写
Started开始评估这次输入HandleStartedEvent
Triggered触发条件满足HandleTriggeredEvent
Ongoing触发器仍在评估,尚不等于成功触发HandleOngoingEvent
Completed已触发输入的完成HandleCompletedEvent
Canceled未完成触发或取消,例如短按未达到 Hold 阈值HandleCancelledEvent

持续移动与视角通常使用 Triggered。短按、长按、释放要结合 Action 的 Trigger 规则选择事件,不能把 Ongoing 当成“每帧成功触发”。

InputActions 与 TriggerEvents 决定登记组合。CanHandle 适合静态匹配,不用于登记后不断变化的玩法许可;能否移动、能否转视角等动态条件放在实际处理函数或 CanMove / CanLook 等领域判断中。

已有处理器按能力选择

需求当前处理器或类型
移动、鼠标视角、手柄视角Move、Look、Look_Gamepad
跳跃、蹲伏与自动奔跑CharacterJump、CharacterCrouch、AutoRun
按动态 InputTag 分派 GAS 输入AbilityInputTag
按 Class/Tag/输入身份定位技能AbilityClass、AbilityTag、AbilityInput
技能中断AbilityInterruption 与对应 InterruptAbility 类型
技能目标确认、取消AbilityTargeting 中的相关类型
项目事件、HUD 与连招GameplayEvent、HUDEvent、CombatCombo、DefaultHoldCombo

移动与角色动作沿项目 Mover 接入。Traversal 通过角色接口提供能力,不表示输入层本身已实现完整攀爬、翻越等动作。

明确移动参考方向

使用 SetForwardReference(USceneComponent*) 指定方向来源组件,或 SetForwardReferenceRotation(FRotator) 指定旋转;后者覆盖当前显式来源。读取接口只保留 Yaw,不把 Pitch/Roll 传进平面移动。

没有有效显式来源时使用 Controller 方向。组件来源可用 nullptr 清除,切换 Pawn 不会自动替提供者清理所有显式方向引用;创建来源的一方应配对设置与撤销。

GAS 输入与 GameplayEvent

AbilityInputTag 使用 ASC 上技能 Spec 的动态 InputTag 进入输入队列。它与“找一个技能类立刻激活”是不同入口,按技能的输入协议选用。

GameplayEvent 通过 Manager.SendGameplayEventToOwner 请求。默认可包含本地与服务器路径,Listen Server 本地只执行一次;远端 Controller 使用对应 RPC。技能实际运行位置仍受 GAS 的 NetExecutionPolicy 约束。

同步返回值只反映当前调用已经发生的激活,不能用来判断服务器稍后通过 RPC 执行的最终结果。技能失败、取消与完成仍由 GAS 通知或实际任务处理。

新增 Handler 的最短路线

先找上表中已有能力,再决定是否派生。自定义处理器设置动作与事件,在对应 Handle 方法里调用领域接口,避免重复做按键映射、持有玩家实例或另建输入调度。

输入值变换见修饰器与双击,需要延迟执行时看通道输入缓存,跨 IMC 的一次分派规则见绑定与生命周期。

实现入口:Framework/Input/StarryInputHandler、Handlers 目录与 StarryInputTypes。

Starry手册导览从模块进入子模块与具体功能,查阅功能用途、配置步骤、技术架构和扩展方法。工程分层与系统协作了解 Framework、Gameplay 与通用插件的依赖方向,以及配置装配和运行状态的边界。模块总览与接入从行为系统、执行系统与机会调度了解 AstraAI,再为角色配置第一套组合决策。组合与覆盖正确区分优先级、行为分数与 Stack 顺序,按完整路径组织可撤销的配置。评分与抢占沿着条件、优先级、分数、持续有效性与冷却,解释一个行为为何开始或退出。Logic 与生命周期把动作接入 Start、Cancel、Cleanup,正确处理共享模板、蓝图实例与过期异步回调。BT、StateTree 与 HTN复用控制器上的树组件,正确传入数据、报告整树结果并等待安全退出。Objective 与机会生成把领域事实整理成当前机会,让评分只读数据,让生成器独立管理订阅。命令发布与领取发布一条命令后,经机会评估、Take、执行与 EndUse 完成一次受控使用。行为区域用可挂载的 Zone 组件分配行为层,并把回区机会与实际导航分开。调试与排查从初始化到候选、机会、应用层与后端,沿真实运行路径定位 AI 没有行动的原因。模块总览与使用了解通用调试工具的操作、远程连接与窗口扩展,再由各模块的排查说明定位具体问题。netImgui 远程面板在独立桌面程序查看调试窗口,区分远程 UI、游戏视口绘制与玩法网络权限。窗口扩展与属性绘制复用窗口生命周期、反射 Inspector 和场景绘制,避免为每个调试页重做基础设施。模块总览与接入从配置绑定、动作处理、通道缓存与玩家改键了解 Input,再接入角色的输入配置。绑定与配置生命周期理解跨 IMC 的共享绑定、配置所有权、延迟初始化,以及切换角色时的清理。Handler 与能力分派选择正确的输入阶段,把输入交给移动、GAS、GameplayEvent 或 UI,保持共享 Handler 无玩家状态。修饰器与双击选择输入值变换所在层,理解玩家设置修饰器与 Double Tap 的时序规则。通道输入缓存按 GameplayTag 通道开窗,保留首批或末批输入,正常关闭执行,中断取消丢弃。改键与玩家设置通过 GameSettings 统一编辑与应用,区分 SharedSettings 偏好和 Enhanced Input 键映射数据。调试与排查使用 Gamepad 与 Actions 观察和模拟输入,沿设备、映射、绑定、缓存与能力定位问题。模块总览与接入使用 UE 5.8 原生 Async Message System,把事件通知与接收方解耦,查阅消息收发、路由和 Starry 的实际接入。蓝图收发与解绑通过消息 Id、监听、载荷封装与解包的核心连线,掌握蓝图收发和任务解绑。C++ 收发与解绑按取得系统、登记监听、读取载荷、发送与解绑的顺序,查阅原生 C++ 接口用法。标签、时机与生命周期理解消息的标签层级、World 和 Endpoint 路由、游戏线程派发、载荷快照与 C++ 监听清理。项目消息与排查查阅 Starry 已接入的消息标签、载荷和触发点,区分本地通知、状态复制与 RPC 转发,并沿真实链路排查。模块总览与项目接入管理软引用加载、有序回调与任务作用域,了解指示器画布的实际接入,以及加载完成后的资源和宿主生命周期。软引用加载与 C++ 用法用组件加载软对象和控件类,保存加载结果,理解路径数组、同步回调、失败结果,以及重载与退出时的取消清理。主资产与资源驻留按主资产 ID 和 Bundle 预加载资源,理解句柄保留、取消与 GC 引用的关系,以及 AssetManager 和打包配置的职责。回调顺序与独立作用域理解并行加载与有序回调的区别,使用 FAsyncScope 分开取消任务,了解 AsyncEvent、开始完成通知和等待条件的当前边界。在文档中说明蓝图用法将真实蓝图节点嵌入正文,结合步骤、引脚和连线说明功能,节点文本随文章保存。维护这本手册本地文件与网页编辑共用一份 MDX,日常只改内容与关系,沿用共享版式和图表。