控制台命令¶
概述¶
在游戏运行的时候直接执行一些调试命令,比如调用特定对象上的方法、修改属性等等,可以为我们调试游戏环境提供一些便利。
默认按 ~ 键可以呼出引擎自带的命令控制台,UnLuaNova自带了一些基础的命令,如果你有一些好的想法,也可以参考 UnLuaNovaConsoleCommands 的实现来扩展。
命令清单¶
lua.do \<code>¶
在默认环境执行一段Lua代码。
示例:
lua.do print("hello world")
lua.dofile \<module path>¶
在默认环境执行指定的Lua文件。
示例:
lua.do test1.test2
lua.gc¶
在默认环境强制执行一次垃圾回收。
lua.profiler [on|off]¶
Lua 函数级 CPU 性能分析,数据写入 Unreal Insights。
开启后会同时点亮两侧的数据:
- Lua 侧:Lua 内部函数的执行事件
- UE 侧:
UFunction在进出 Lua 时的作用域(CallLua/CallUE/CallUEFast)
因此在 Insights 里可以直接看到 UE 函数 → Lua 函数 的完整调用链。不带参数时输出当前开关状态。
示例:
lua.profiler on
lua.profiler off
注:与「无限循环检测」可以同时开启。两者都需要 VM Hook 槽,过去会互相覆盖,现在统一由 Hook 分发器分配,不再冲突。
lua.memstats [on|off|reset]¶
Lua 堆内存统计。
on:开启统计off:关闭统计reset:清零所有计数器- 不带参数:输出当前报告
报告分两部分:
- 总量:当前占用、峰值、分配 / 重分配 / 释放次数
- 分类:按「内存类别」「Lua 类型」「userdata 标签」三个维度各输出 Top N
示例:
lua.memstats on
lua.memstats
lua.memstats reset
注:分类统计依赖 Luau 后端的分配回调(onallocate),在 Lua 5.5 后端不可用,报告中会给出提示。另外分类维度统计的是分配量(churn)而不是存活字节 —— 存活与峰值请看总量部分。
lua.dbg [子命令]¶
Headless 调试服务。它本身不提供界面,而是把能力暴露出来给外部工具(未来的 DAP 适配器)驱动,同时也可以直接用命令交互。
| 子命令 | 说明 |
|---|---|
| (不带参数) | 输出状态:是否已挂载、是否暂停、命中次数、断点数 |
bp <源码> <行号> |
断点开关,对同一位置再执行一次即移除 |
step |
单步执行 |
continue |
继续执行 |
stack |
打印上次捕获的调用栈 |
locals |
打印上次捕获的局部变量 |
clear |
清除所有断点 |
detach |
卸载调试 Hook |
示例:
lua.dbg
lua.dbg bp MyActor 42
lua.dbg stack
注:不敲命令时不安装任何 Hook,常态零开销。断点与单步的原生能力(lua_breakpoint / lua_singlestep)仅 Luau 后端提供,Lua 5.5 后端退化为按行号匹配。
lua.sandbox(启动期 CVar)¶
加固 Lua 全局表(Luau 的 luaL_sandbox):开启后全局表只读,脚本无法意外改写引擎绑定。
它是一个控制台变量,不是可执行命令 —— 每个 Lua 环境创建时读取一次,运行中修改不会影响已经存在的环境。 要开启请写进 ini,让它在启动时生效:
; Config/DefaultEngine.ini
[ConsoleVariables]
lua.sandbox=1
注:默认关闭,因为这是对已有脚本的行为变更。该能力依赖 Luau 原生沙盒,Lua 5.5 后端不支持。 详见Luau 后端。