Input · 模块总览与接入

从配置绑定、动作处理、通道缓存与玩家改键了解 Input,再接入角色的输入配置。

本页内容6 节

子模块与功能

进入具体功能,查阅使用步骤、运行机制与扩展方法。

配置与绑定

动作处理

  • Handler 与能力分派

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

  • 值与触发规则
    • 修饰器与双击

      选择输入值变换所在层,理解玩家设置修饰器与 Double Tap 的时序规则。

输入缓存

  • 通道输入缓存

    按 GameplayTag 通道开窗,保留首批或末批输入,正常关闭执行,中断取消丢弃。

玩家改键

  • 改键与玩家设置

    通过 GameSettings 统一编辑与应用,区分 SharedSettings 偏好和 Enhanced Input 键映射数据。

调试与排查

  • 调试与排查

    使用 Gamepad 与 Actions 观察和模拟输入,沿设备、映射、绑定、缓存与能力定位问题。

输入经过哪几层

Input 连接设备输入与项目能力。配置与绑定管理 Setup 的应用和释放,动作处理选择事件并调用移动、GAS 或 UI;输入缓存处理延迟执行窗口,玩家改键接入 GameSettings 与 Enhanced Input 的设置数据。各部分的使用步骤、机制和约束放在自己的功能页中。

Input Action 定义输入值与触发规则,IMC 把设备按键映射到 Action,Setup 把 IMC 与 Handler 组织为一份配置。PlayerController 上的 UStarryInputManagerComponent 绑定动作事件,再分派到共享 Handler。

从按键到项目能力关系 / 流程
正在整理图表…
从按键到项目能力
查看图表源码
flowchart LR
  Device(键鼠 / 手柄) --> IMC(Input Mapping Context)
  IMC --> IA(Input Action)
  IA --> Event(Enhanced Input 事件)
  Setup(Input Setup) -->|IMC 与 Handler| Manager(Controller 的 InputManager)
  Event --> Manager
  Manager --> Buffer(按通道判断缓存)
  Buffer --> Handler(共享 InputHandler)
  Handler --> Domain(Mover / GAS / UI / Gameplay)

Manager 随 Controller 跨 Pawn 复用,只支持 PlayerController 挂载。UStarryInputManagerComponent 已继承输入缓存组件,不需要为了基本缓存再在角色上挂一份平行 Manager。

新增一个动作

  1. 创建 Input Action,选择正确的 Value Type,配置动作自身的 Trigger 与 Modifier。
  2. 在 IMC 中添加键位映射,按需配置按键条目的修饰器。
  3. 在内容浏览器 Starry → Input 创建 Input Setup;需要自定义行为时从同分类创建 Input Handler 蓝图。
  4. 填写 Setup 的 InputMappingContext、Priority、InputHandlers。
  5. 给 Handler 指定 InputActions 与 TriggerEvents,实现或选用对应的处理逻辑。
  6. 按配置的拥有者,将 Setup 接入固定 Controller、角色或 GameFeature 中的一处。

Priority 默认 0。Setup 的资产校验会检查缺失 IMC、空 Handler、未配置动作/事件与 IMC 动作缺少处理器等情况。先解决配置校验,再排查运行时。

共用 Action 位于 Content/Blueprints/Input/Actions,共用 Setup/IMC 位于 Content/Blueprints/Input/Setups;只服务某一功能的资源随功能归属,不把所有输入资产都堆到全局目录。

选择一个接入拥有者

配置来源填写或调用位置适合用途
Controller 固定配置Manager 的 InputHandlerSetup跟随本地玩家持续存在的输入
角色配置UStarryCharacterData::InputSetups 数组,经 PlayerCharacter 的 Provider 返回随角色切换的移动或角色能力
功能配置GameFeatureAction_AddInputBinding::InputSetups随功能进入与退出配对添加、移除
辅助映射Manager 的 StandaloneContexts不由一份 Setup 提供 Handler 的辅助 IMC

角色配置由 Manager 统一应用;Hero 在角色数据就绪时请求 RefreshPawnInputSetups,不维护第二份角色配置记录。功能来源之间不要重复拥有同一 Setup 或同一 IMC。

Controller 初始化要完整

AStarryPlayerController 已创建默认 Manager,并在 SetupInputComponent 的基类调用之后执行 InitializeInput()。自定义 Controller 时保留同样的接入顺序。

初始化需要 LocalPlayer、Enhanced Input Subsystem 与 Controller InputComponent 就绪。InputComponent 应为 UEnhancedInputComponent;当前没有输入组件运行中重建后的自动恢复机制。

项目 Config/DefaultInput.ini 使用:

DefaultPlayerInputClass=/Script/StarryGame.StarryPlayerInput
DefaultInputComponentClass=/Script/EnhancedInput.EnhancedInputComponent
bEnableUserSettings=True
UserSettingsClass=/Script/StarryGame.StarryInputUserSettings

这些是输入配置的相关项,实际修改时保留它们所在的配置节与其他配置。

完成后应该看到什么

通过 HaloDebug 的 Actions 工具能看到映射后的 Action;操作设备后,对应 TriggerEvent 分派到 Handler。切换 Pawn 时角色配置随之更换,Controller 固定配置按 Manager 的重置策略处理。

配置增删、共享绑定与所有权见绑定与生命周期,动作如何交给移动和 GAS 见Handler 与能力分派,没有响应时看Input 排查。

实现入口:Source/StarryGame/Framework/Input、Framework/Character/StarryCharacterData 与 StarryPlayerCharacter。

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,日常只改内容与关系,沿用共享版式和图表。