HaloDebug · netImgui 远程面板

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

本页内容5 节

先构建桌面查看器

项目内的 NetImgui 提供 Windows x64/DirectX 11 查看器。需要 VS 2022 C++ 桌面开发、Windows SDK 与 CMake,使用项目根目录下的构建入口:

./NetImgui/Build.bat

结果位于 NetImgui/NetImguiServer/NetImguiServer.exe。复制使用时保留整个输出目录。中间文件在 NetImgui/Intermediate,可通过 -OutputDirectory 指定输出,通过 -Configuration Debug 选择调试构建。

上游把桌面程序称为 Server,游戏插件称为 client。这是调试 UI 传输中的命名,不表示桌面程序是 UE 专用玩法服务器。

推荐的本机连接路线

  1. 启动 NetImguiServer.exe。
  2. 启动 Starry 的 PIE 或 Development 游戏,按 F1 打开 HaloDebug。
  3. 打开 Engine → Debug Tools → Net ImGui。
  4. Server Address 使用 127.0.0.1、端口 8888,点击 Connect。
  5. 在桌面程序中查看调试窗口,确认当前连接的是需要排查的游戏实例。

也可以让游戏 Listen,默认客户端监听端口 8889,再由桌面程序添加连接。跨机器连接时填写对应机器地址。

两种连接方向只选择所需的一种关系 / 流程
正在整理图表…
两种连接方向只选择所需的一种
查看图表源码
flowchart LR
  GameA(游戏 Connect) -->|默认 8888| ViewerA(桌面查看器监听)
  ViewerB(桌面查看器发起连接) -->|默认 8889| GameB(游戏 Listen)
  GameA -.-> ViewA(游戏视口仍显示场景绘制)
  GameB -.-> ViewB(游戏视口仍显示场景绘制)

常用控制台命令

命令用途
HaloDebug.NetImgui.Connect按窗口中保存的连接配置发起连接
HaloDebug.NetImgui.Listen按客户端端口等待桌面查看器
HaloDebug.NetImgui.Disconnect断开当前连接
HaloDebug.NetImgui.RunServer启动配置的桌面程序
HaloDebug.NetImgui.CloseServer关闭由工具管理的桌面程序

桌面程序目录留空时指向项目的 NetImgui/NetImguiServer。默认不自动启动桌面程序;打包游戏可配置独立工具目录。自动连接可分别按 Standalone、Client、Listen Server、Dedicated Server 设置。

远程窗口和场景操作分开

netImgui 传输面板 UI 与交互。选框、碰撞和 Gizmo 仍在游戏视口里逐帧绘制,不会变成桌面查看器中的远程三维场景。

在桌面面板点击选取后,回到游戏视口左键选择、右键取消。需要拖动 Gizmo 时,在游戏视口按 F1 启用调试输入,再拖动轴或平面。断开 netImgui 后恢复本地面板。

远程显示没有提供通用 Actor 复制或图形 RPC。连接客户端进程后看到的仍是该进程状态,修改是否影响服务器由实际领域接口决定。

连接失败时检查

先确认桌面程序已经启动、双方选择了匹配的 Connect/Listen 方向、端口一致、目标游戏实例正确,再检查机器地址与连接配置。多实例时给客户端使用可辨认名称,避免在错误进程里追查状态。

若窗口已连接但游戏视口里没有图形,检查当前世界、窗口绘制开关和视口调试输入;不要把 UI 连接成功当成三维内容也会在桌面程序显示。

日常工具入口见调试工具入门,Gamepad 与 Actions 的操作及注入范围见 Input 调试与排查。

实现入口:项目 NetImgui 目录、插件 HaloDebugEngineWindow_NetImGui 与 HaloDebugImguiContext。当前项目两端使用同源 netImgui 1.13 协议。

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