mcpField
I
inspect-runtime

inspect-runtime

github.com/playcanvas开发31139 次安装1 周前更新
代码仓库

关于 inspect-runtime

inspect-runtime 是用于检查运行中 PlayCanvas 应用的技能,可通过 Engine hook 读取状态,无需向应用代码添加调试引用,适合开发阶段排查运行情况。

主要功能

  1. 01通过 Engine hook 发现运行中的应用
  2. 02读取场景实体与运行时统计数据
  3. 03暂停并逐帧检查渲染
  4. 04检查资源、材质与物理内容

适用场景

  1. 01查看实体位置和网格边界
  2. 02测量绘制调用数与帧耗时
  3. 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