编辑态、运行态、暂停、重载中、编译中、导入中,乃至无响应。这份状态同时服务两端:你在状态面板上能看到 Unity 正在做什么,是卡死还是在正常重载;Agent 依据同样的信息决定何时调用 Unity、何时等待,面板中的操作安全行显示的就是这个判断结果。排障时这尤其有用:Agent 能确认游戏正处于运行态、编辑器是否正在重载,而不是对着一个黑盒盲试。
以下三个子系统都默认开启,开关集中在「设置」→「Unity 连接」。
状态探针
常规状态检测依赖编辑器内插件的应答,但恰恰在最需要状态的时刻(域重载中、编辑器卡死时)通信管道是静默的。状态探针从 Unity 进程外部读取编辑器状态,让状态在这些时刻仍能持续更新,Locus 因此能区分”正常重载中”与”真的卡死了”。 探针采用分层回退:拿不到深层信息时自动降级为较粗略的检测方式,最差退回”管道加进程推断”,状态显示始终可用,只是精度下降。状态面板的状态探针行显示当前工作层级。
开关为进程外状态探针;同区域的实机连接测试会连接运行中的编辑器,依次覆盖域重载、播放、暂停、恢复与退出播放,验证探针能观察到每次状态变化。
卡死诊断
编辑器主线程超过 30 秒没有回到编辑器循环时,状态变为无响应,Locus 随即自动分析主线程停在哪里:原生桥接在 Unity 进程内对主线程做几次极短的采样,沿调用栈一直走到托管(C#)代码,并给出方法名与源码行号;Unity 自身的原生帧用随编辑器附带的符号文件解析。结论显示在状态面板的 Unity 详情中:
卡死诊断:主线程是在持续执行代码(CPU 占用高,多半是死循环或耗时过长的操作)还是在等待(阻塞调用、等待另一个线程,或死锁),以及卡住的代码属于项目代码、Agent 执行的代码还是 Unity 编辑器。卡死位置:最可能的出问题位置,优先选项目代码或 Agent 执行的代码中的那一帧。- 完整的主线程调用栈、采样来源与备注收在
诊断信息中。
重启 Unity时仍有 Agent 的 Unity 调用在等待,这些调用会立即结束,并把”用户已重启 Unity”和卡死位置一并返回给 Agent,不会挂起,也不会接到重启后的新编辑器上。
插件版本较旧时,诊断退化为从进程外扫描调用栈,只能看到原生帧;更新 Locus Unity 插件即可看到 C# 帧。
原生桥接
原生桥接为 Locus 与 Unity 之间的命令通道提供原生层实现,最关键的价值是让连接在域重载期间保持不断开:重载结束后命令继续执行,不需要重新握手。 开关为Native Plugin Bridge。关闭后回退为普通管道连接,域重载期间的连接保持与状态融合能力随之失效,每次重载后需要重新建立连接。状态面板的原生桥接行显示 就绪、未连接或已关闭。
Unity 后台加速
Unity 编辑器在失焦或位于后台时会推迟处理外部命令,直到你把它切回前台。这意味着没有后台加速时,Agent 每触发一次重编译,你都得手动点一下 Unity 窗口。 后台加速(后台 Hook)为编辑器打补丁,使其在后台仍持续处理 Locus 命令,包括重编译。开启后 Agent 可以在你专注于 Locus 或其它窗口时独立完成”改代码、编译、验证”的循环。
开关为后台保持编辑器响应。它基于原生符号实现,不可用时自动回退,回退后把 Unity 切到前台即可正常执行。状态面板的后台 Hook行显示 已生效、等待进程、失败、不可用或已关闭。
「设置」→「测试」中的后台重编译探针可以验证效果:它写入一个无害的临时脚本并触发一次真实重编译,完成后自动清理;若后台 Hook 生效,整个过程无需把 Unity 切到前台。