关于 inspect-runtime
inspect-runtime 是用于检查运行中 PlayCanvas 应用的技能,可通过 Engine hook 读取状态,无需向应用代码添加调试引用,适合开发阶段排查运行情况。
主要功能
- 01通过 Engine hook 发现运行中的应用
- 02读取场景实体与运行时统计数据
- 03暂停并逐帧检查渲染
- 04检查资源、材质与物理内容
适用场景
- 01查看实体位置和网格边界
- 02测量绘制调用数与帧耗时
- 03在开发期间浏览场景结构
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ playcanvas/ skills --skill inspect-runtime安装后在 Claude Code 中输入/inspect-runtime确认已加载。
附带文件scripts/devtools-hook.js
详细介绍
检查正在运行的应用
从 Engine 2.23 开始,每个应用都会向
globalThis[Symbol.for('playcanvas.inspector')] 处的 hook 宣告自身。通过它读取实时状态,而不是向应用添加
window.app 或调试代码。
挂载
- 相对于此 skill 解析
scripts/devtools-hook.js,并将其作为 init script 注入,使其在任何页面脚本之前 运行。稍后定义的 hook 会错过已有应用;应改为重新加载。 - 随后页面代码读取
globalThis.__playcanvasApps,这是一个Map,将每个活动应用映射到{ version, revision, protocol }。app.init()添加条目,app.destroy()移除条目。 - 该脚本会串联在它之前定义的 hook,例如 devtools 扩展的 hook。
- 没有条目意味着 Engine 早于 2.23、hook 加载过晚,或应用设置了
devtools: false。Engine 会吞掉 hook 抛出的错误。 - 在 2.23.0 中,只有 debug 构建(
playcanvas/debug、build/playcanvas.dbg.*)会宣告应用; 默认导入永远不会调用 hook。后续 2.23 补丁修复了所有构建。
读取状态
- 在
frameend之后读取,这样值反映的是已渲染帧。 - 向调用方返回普通数字和字符串,而不是 Engine 对象。
- 有用的读取:
app.root.findByName()和findByTag()、世界位置和meshInstance.aabb、app.stats.drawCallCount和frameTime,以及entity.anim.baseLayer.activeState。 - 用
app.timeScale = 0暂停;update仍会以零dt运行。通过恢复缩放来单步执行一帧, 然后在下一个frameend再次将其置零。 - 还原你为进行测量而更改的任何内容。
Inspector 面板
@playcanvas/inspector 为人类添加了一个面板:new Inspector(app) 显示层级、资产、
材质、着色器、纹理、渲染目标、帧图和物理。它必须导入应用自己的
playcanvas 包,因此只应将其添加到开发构建中。它会绘制在 canvas 之上,
并应用视图覆盖,因此在 verify-pixels 捕获之前销毁它。单步执行绘制
需要 debug 构建。
评论
支持 Markdown