HaloDebug · 模块总览与使用

了解通用调试工具的操作、远程连接与窗口扩展,再由各模块的排查说明定位具体问题。

本页内容7 节

子模块与功能

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

远程调试

  • netImgui 远程面板

    在独立桌面程序查看调试窗口,区分远程 UI、游戏视口绘制与玩法网络权限。

扩展开发

模块职责与功能入口

HaloDebug 提供调试窗口与菜单、ImGui 输入、属性检查和场景绘制基础;Starry 在此之上注册项目工具。这里说明工具怎样操作、连接与扩展;具体模块的状态含义、异常原因和排查步骤在所属模块中说明。

文档中的功能分区面向实际用途,插件的 C++ 模块分工见下文;一个功能可能使用多个底层模块,例如远程显示通过 ImGui 传输窗口,场景绘制仍在游戏进程完成。

从 F1 开始

在 PIE 或非 Shipping 游戏中按 F1,或执行 HaloDebug.ToggleInput,切换调试输入。打开菜单中的所需窗口,完成检查后再切回正常游戏操作。

Starry 由 UStarryDebugSubsystem 注册项目菜单。HaloDebug 提供窗口、输入、绘制与配置能力,项目决定打开哪些工具以及工具操作哪些领域。

常用工具在哪里

想做什么当前菜单
选择 Actor、观察当前选择Engine → Selection
查看 Actor 属性Engine → Actor → Inspector
调整位置、旋转与缩放Engine → Actor → Transform
查看骨架Engine → Actor → Skeleton
执行 CheatEngine → Actor → Cheats
碰撞查询与碰撞显示Engine → Scene → Collision Tester / Collision Viewer
看日志、通知、曲线与指标Engine → Diagnostics
时间倍率Engine → Time Scale
网络模拟与画质Engine → Runtime → Net Emulation / Scalability
ImGui、Slate、快捷命令与远程连接Engine → Debug Tools
AI 决策与后端AI
手柄与 Action 注入Input → Gamepad / Actions

这些路径对应当前注册代码。查不到旧名称时,先核对项目菜单,不要据此新增同功能窗口。

操作对象与当前世界

选择决定 Inspector、Transform 等工具的目标。使用选取模式时在游戏视口左键选择、右键取消。拖动 Gizmo 需要游戏视口里的调试输入已经打开。

Cheats 默认作用于选中的 Actor;按住 Ctrl 点击时改用本地受控 Pawn。控制台形式是 HaloDebug.Cheat <CheatName> [-Controlled]。当前没有 Shift/Alt 的阵营批量操作,也没有调试 Possess 菜单。

面板操作发生在当前连接的游戏进程与世界。它不会自动把客户端的修改变成服务器 RPC;玩法权限与同步仍由对应领域处理。多人 PIE 中先确认正在操作哪个世界。

面板、领域与游戏视口的关系关系 / 流程
正在整理图表…
面板、领域与游戏视口的关系
查看图表源码
flowchart LR
  User(调试输入) --> UI(ImGui 窗口)
  UI --> Domain(当前世界的领域接口)
  Domain --> State(运行状态)
  State --> UI
  UI --> Draw(本进程场景绘制)
  Draw --> Viewport(游戏视口)
  UI --> Remote(netImgui 桌面显示)

插件内部如何分工

模块职责
HaloDebugWorldSubsystem、窗口、菜单、布局与配置
HaloDebugCommon公共接口与构建宏
HaloDebugImguiImGui、输入、Slate 与 netImgui 接入
HaloDebugPaint本进程场景绘制、Gizmo、曲线与指标
HaloDebugEngine通用 Engine 工具与反射属性 Inspector
HaloDebugInputGamepad 与 Actions 调试

ENABLE_HALODEBUG = !UE_BUILD_SHIPPING。面板和工具代码按构建条件使用;部分运行时反射类型仍需在 Shipping 中存在以便资产加载,不能把这一宏解释为整个插件完全不存在。

看不到面板时

先确认当前不是 Shipping、项目已启用插件且 Subsystem 注册了窗口,再检查 F1 调试输入、窗口可见性和当前世界。中文缺字还应检查非 Shipping 字体文件部署:字体由标准文件读取,只有 Cook 到 Pak 并不足以替代相应 NonUFS 文件。

远程桌面显示见netImgui 远程面板,新窗口与绘制复用见窗口扩展与属性绘制。

定位具体系统的问题时,从所属模块的排查章节进入:Input 调试与排查包含 Gamepad/Actions 操作、模拟范围与输入诊断路线,AI 问题见 AstraAI 调试与排查。

实现入口:Plugins/Toolkit/HaloDebug 与 Source/StarryGame/Framework/Development/StarryDebugSubsystem。插件来源为 Cog,保留 MIT 许可;具体来源与许可记录随项目维护。

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