Skip to content

v3.0.0

Latest

Choose a tag to compare

@Besty0728 Besty0728 released this 11 Nov 12:33
· 5 commits to main since this release

v3.0.0 — SKILL.md 重新梳理、Workflow 可回到任意检查点、评测集随包发布

🔁 2026-11-12 重发

首发(2026-11-11)之后补了一批模块文档层的修复,仍用 3.0.0,v3.0.0 tag 已移到新提交。

已装首发 3.0.0 的用户需要手动操作

  • 版本号没变,面板不会提示更新,已装到 agent 目录的 Skill 文档也不会自动同步。
  • UPM git URL 安装(#v3.0.0):Packages/packages-lock.json 里钉的是旧提交。在 Package Manager 里移除后重新添加,或删掉 lock 文件里 com.besty.unity-skills 这一项让 Unity 重新解析。
  • git clone 安装:本地自更新会拒绝被移动的 tag,请手动 git fetch --tags --force 后切到 v3.0.0。
  • 拉到新包后,在面板的 AI 配置页重新安装 Skill:先点「卸载(项目)」或「卸载(全局)」,再点「项目安装」或「全局安装」。直接安装会被判为「已安装的副本已是当前版本 3.0.0,无需更新」而跳过。旧的 skills/<module>/SKILL.md 会随之清掉;在 Codex 这类发现器里,unity-skills 会从 87 条变回 1 条。

这次补了什么

  • 模块入口改名(87 条 → 1 条)
  • 46 条规则搬进技能描述 / 参数说明 / 报错
  • SKILL_NOT_FOUND 对 120 个常见错名直接给出正确技能
  • 六个模块的 v2 schema 条目带 doc

⭐ Highlights

  • SKILL.md 按 Agent 的实际读法重写:根入口先分清「自动化 / 指引 / 设计建议」三条路由,硬协议只留 Agent 真会照做的部分,大小 8189 → 7936 字节,之后按评测补上路径、盘点、删除前 dryRun 等规则涨到 8188 字节;按 214 个评测会话与 C# 实现逐句复审重写到 7433 字节,最后加入 advisory 路由(用 NGO、YooAsset、Addressables 等包写 C# 前先读对应的 *-design 文档),首发 7661 字节,重发后 7694 字节(8192 上限由测试守着)。删除 SKILL_FULL.md,其中独有的规则迁到对应参考文档。85 个模块文档统一成英文的同一骨架,超过 12 KB 的 15 个模块拆成入口加 reference/。配对实测通过数不变,token 基本持平(约 0.97×)。
  • Workflow 大升级:检查点、按需回退、冲突感知:Agent 空闲 30 秒后的第一次写操作自动打检查点,也可以给任意写请求打标签。workflow_restore 回到任意检查点、步骤或标签;回退前先查用户和其他 agent 之后有没有动过同一目标,有冲突就停下并列出清单,由调用方决定保留还是覆盖。只改回被回退步骤改过、之后没人再动的属性;可以用 scope 只回退部分物体、资产或设置;每次回退都能先 dryRun 预览,回退本身也能撤销。历史改成只追加的日志,写操作不再整份重写历史文件。History 页改为按检查点分组的时间线。
  • 评测集随包发布:面板新增 Evaluation 页,四步走完「选题 → 复制提示词给 Agent → 看进度 → 看结果」,也可以直接用 /unity-skills-eval。评测器是随包的纯标准库 Python,不常驻进程。公开题包 1.2.0 共 41 题,评分用的私有断言不随包分发。报告给出通过数、完全通过率、平均完成度和等级。发布前已在 Claude Code、Codex、Cursor、Kimi Code、Antigravity 上实测跑通。
  • 其他:原生 entityId 定位(Unity 6000.4+ 同名物体也能精确命中)、设置按工程保存、Particle 模块 31 个技能、project_add_layer、面板石墨配色。技能 839 → 873(+34)。

📏 本版实测

项目 结果
写操作的 Workflow 开销 空历史与 40 MB(约 5.8 万步)历史下 p95 都是 0 ms;旧格式在 15 MB 历史时每次写中位 248 ms
6 万步历史完整重放 约 0.8 秒
SKILL.md 重写前后配对(Claude Code 无头 + Sonnet,2022.3 URP,运维基础 6 题与 T4 各 3 次) 通过 21/21 → 21/21;处理 token 均值 646K → 625K
回退实机剧本(REST 脚本) 搭建后回退、用户手改冲突、回退触发域重载、两个 agent 交替写入、按属性 / 按范围回退,全部通过
完整 EditMode 2022.3.62f2 URP 2752 项,6000.3.9f1 URP 2763 项,均 0 失败
CI 2022.3、6000.0、6000.2、6000.3、6000.4、6000.5 六个版本的 EditMode 与可选包作业全部通过
题包验证(每题用参考解与反例在真实编辑器上跑) 2022.3 URP 41/41,6000.3 URP 41/41,Built-in 12/12(runner 最后一次修改后两个 URP 版本全部重跑)
同一编辑器里域重载越来越慢 与插件无关:空的 6000.3 工程连续 120 次重载,中位 1.64 → 3.08 秒,装上插件 1.75 → 3.32 秒;评测负载下 6000.3 第 320 次约 17 秒。根因是 Mono 的共享泛型模板跨重载只增不减,只有重启编辑器能清零;插件改为在 /health 报告并建议重启(见 Added / Fixed)
多 Agent 实测(Built-in 12 题,6 种 Agent 配置) 全部 12/12
Unity 6 URP 实测(Haiku 5.5 · max,41 题) 39/41,见下文
临时 Workflow 回退题(Haiku、Sonnet、Opus 默认 effort) 全部通过

🧪 公开题包 1.2.0(41 题)

管线 \ 等级 基础 标准 挑战 小计
运维 ops 6 7 8 21
开发 dev 6 6 8 20
合计 12 13 16 41
  • 运维题覆盖建物体、改层级、材质、预制体与变体、批量审计、光照与 UI 搭建;开发题从单脚本行为一路到状态机、命名空间迁移、asmdef 和 ScriptableObject 配置。
  • 每题自带时长预算,41 题合计约 1000 分钟。第一次建议从「当前等级」开始,不要直接跑全部题目。
  • Built-in 工程只能跑基础 12 题,标准与挑战共 29 题需要 URP。「全部题目」按当前工程的渲染管线选题,提示词里写明跑几题、排除几题。
  • 等级按完全通过率划分:≥90% 优秀、≥70% 良好、≥50% 及格。
  • 题目位置、运行方式与总览见 README 的评测集一节;实测成绩见后两节。

🤖 Claude 实测(题包 1.2.0,URP 41 题)

模型 · effort 通过 完全通过率 平均完成度 等级 Agent 用时 处理 token 费用
Haiku 5.5 · max 41/41 100% 100% 优秀 263 分钟 55.4M $4.77
Sonnet 5.5 · medium 40/41 97.6% 99.8% 优秀 117 分钟 7.0M $5.61
Opus 5.5 · medium 41/41 100% 100% 优秀 170 分钟 10.3M $14.98
  • 条件:Claude Code 2.1.312 无头模式,每题一个独立会话、跑 1 次;Unity 2022.3.62f2 URP,插件 3.0.0,英文提示词。Built-in 12 题的实测见下一节。
  • Sonnet 唯一没有完全通过的是 OC6(把 4 扇场景门提取为预制体):R3「门根的世界变换与兄弟序号保持不变」未过,该题完成度 92.5%。核实是 Sonnet 自己的错误:它把三扇门都排到第 3 位,其中一扇原本在第 2 位。
  • Haiku max 全部通过,但处理 token 约为 Sonnet medium 的 8 倍,用时约 2.2 倍;Haiku 单价低,总费用反而略少。
  • Opus medium 全部通过,用时与处理 token 约为 Sonnet medium 的 1.5 倍,费用约 2.7 倍。
  • Agent 用时是各题会话墙钟时间之和,不含评测器搭场景与判分的时间;处理 token 含缓存读取;费用是 Claude Code 按标价折算的数字,不是订阅的实际扣费。
  • 重跑:6 次会话因 API 连续重试或额度用尽而中断(Haiku OC3、OC4、OC6,Sonnet DB6、DS1,Opus OC6);另有 4 次被内部批量评测脚本误判为越界(Haiku OC7、DB5、T9、DC6,实际读的是 Claude Code 自己转存的大段工具输出),误判已修复;还有 1 次是插件的变更日志造成的误判(Opus OS1:transactional 批处理失败回滚时,同一请求里刚建又被撤掉的灯留下了没有路径的删除记录,被判成越界,最终场景其实是对的),已修复(见 Fixed)。这 11 题都换新会话重跑,表中只计重跑那一次。

Unity 6 URP

模型 · effort 通过 完全通过率 平均完成度 等级 Agent 用时 处理 token 费用
Haiku 5.5 · max 39/41 95.1% 97.5% 优秀 352 分钟 38.9M $3.22
  • 条件:Claude Code 2.1.312 无头模式,每题一个独立会话、跑 1 次;Unity 6000.3.9f1 URP,插件 3.0.0,英文提示词。
  • T9(完成度 42.5%):代码改对了,三个 Guard 的值都保留了,但 Haiku 提交前自己重载了场景,判题器还在用搭建时的 instanceId。这是判题器的局限,已改为按层级路径定位。
  • OC8(55%):Haiku 认定没有技能能定义 Layer,如实报告后放弃。当时确实只能用通用的属性写入改 TagManager,模块文档还写着 Layer 只读;本版补上了 project_add_layer 并改正文档。
  • 实例钉 100%,幻觉调用 0;OS2 第一次因 API 连续重试判无效,换新会话重跑通过。
  • 这一轮还发现并修复了 4 个插件问题,见 Fixed 里的 scenario 计时、日志证据、ProjectSettings 路径与回退落盘。

🧭 多 Agent 实测(题包 1.2.0,Built-in 12 题)

Agent · 模型 · effort 通过 完全通过率 平均完成度 等级 Agent 用时 处理 token 提示语言
Antigravity · Gemini 3.8 Flash · High 12/12 100% 100% 优秀 19.9 分钟 28.6M 英文
Cursor · Grok 4.7 12/12 100% 100% 优秀 30.3 分钟 26.4M 英文
Kimi Code 2.2.0 · Kimi K3.1Pro 12/12 100% 100% 优秀 18.3 分钟 13M 中文
Codex 0.163.0-alpha.10.2 · gpt-6-luna · max 12/12 100% 100% 优秀 48.6 分钟 32.3M 英文
Claude Code 2.1.312 · Opus 5.5 · xhigh 12/12 100% 100% 优秀 13.0 分钟 4.6M 英文
Claude Code 2.1.312 · Sonnet 5.5 · xhigh 12/12 100% 100% 优秀 10.0 分钟 6.9M 英文
  • 条件:Unity 2022.3.62f2 Built-in 普通工程(不是专用评测工程),插件 3.0.0。从 Evaluation 页「全部题目」生成提示词,粘贴给各 Agent;每个 Agent 在一段对话里按顺序跑完 ops basic 和 dev basic 两个整套会话,各跑 1 次。按运行日期排列。
  • 6 种配置都没有部分完成、失败或无效题。只有 Cursor 的 S08(只读盘点)超出时长预算,用了 635.7 秒,仍判通过。
  • 评测器只能从 Claude Code 和 Codex 的本机会话日志里识别宿主、模型,并读取 token;Antigravity、Cursor、Kimi Code 三行的模型与 token 为人工填入。
  • Agent 用时与处理 token 的口径同上一节。Codex 的 dev 会话处理 token 约 2903 万,是这一批里最高的。
  • 单次运行,宿主和 effort 各不相同,只说明这些 Agent 都能把基础题跑通,不作排名。标准与挑战题需要 URP 工程,本版只有上一节的两组 Claude 跑过。

📐 文档遵守度实测(Haiku 5.5,四档 effort)

effort 通过(前 → 后) 处理 token/题 请求/题 TARGET_NOT_FOUND 次数 失败调用/题
low 25 → 24 273K → 239K 12.2 → 10.9 12 → 5 1.72 → 1.88
medium 23 → 25 293K → 277K 12.5 → 9.9 8 → 1 0.88 → 0.52
high 24 → 23 372K → 311K 15.5 → 11.2 13 → 2 0.92 → 0.92
xhigh 25 → 25 578K → 460K 19.3 → 13.9 14 → 4 1.32 → 0.60
  • 条件:Claude Code 无头模式 + Haiku 5.5,Unity 2022.3.62f2 URP,运维与开发两条管线的基础、标准题共 25 题,每档每题跑 1 次。「前」是本轮改动之前的 3.0 文档与插件,「后」是改动之后。
  • 起因:基线的 100 个会话没有一次打开模块文档,Agent 只读根 SKILL.md、schema / recommend 里的参数说明和错误响应;151 个错误码里有 48 个是把 Root/Hall/Markers 这样的层级路径写进了 name。
  • 改动:name 含 / 时按层级路径解析;给 Agent 用错过的参数补说明;batch dryRun 认得前面步骤要加的组件;根文档补上「一次盘点」与「写入回读即验证」,dryRun 范围收窄到删除、脚本 / 编译、非事务多步 batch、approval 模式与拿不准时。
  • 结果:通过数每档最多差 1 题;处理 token 下降 5%–20%,请求数下降 11%–28%,找不到目标的错误 47 → 12,console type 传非法值 7 → 0。
  • 未改善的两项,不再为指标改文档:T4 仍会先猜一个不存在的技能名,错误响应给出正确名称后下一步就改对;xhigh 读 / 写比 1.91 → 2.26,绝对读次数其实从 25.4 降到 21.6,比值上升是因为写入更多合并进了 batch。
  • 复测中发现:dryRun 收窄后,asset_delete 不先 dryRun 就执行的会话 0 → 3,旧规则是靠「riskLevel high」覆盖到它的。根文档把删除类写明为 operation 含 Delete 后,重跑运维标准题 medium、high 两档,这类会话降到 0,通过 6/7、7/7。
  • 单次运行,单题有噪声,结论看整体趋势。

根文档重写后的复测

条件同上。「前」是上表改动后的 cand 组,「后」是根 SKILL.md 重写、脚本写入直接执行与本版最后一批服务端修改之后。

effort 通过(cand → D) 处理 token/题 请求/题 失败调用/题 脚本写入前 dryRun
low 24 → 24 239K → 211K 10.9 → 8.3 1.88 → 0.60 9 → 0
medium 25 → 24 277K → 213K 9.9 → 9.0 0.52 → 0.16 13 → 0
high 23 → 25 311K → 316K 11.2 → 11.3 0.92 → 0.68 12 → 0
xhigh 25 → 24 460K → 428K 13.9 → 11.7 0.60 → 1.16 12 → 2
  • 合计通过 97 → 97,脚本题 47 → 47;脚本写入前的 dryRun 46 → 2,删除前不 dryRun 与 scene_save 的 dryRun 都是 0;处理 token 除 high 档持平(+1.6%)外下降 7%–23%。
  • xhigh 的失败调用上升来自 T7 的一个会话:逐个查 21 个本来就没有 BoxCollider 的箱子,每次都是 TARGET_NOT_FOUND,题目仍然通过;去掉这个会话为 0.32。OS2 的 A2(面板尺寸与位置)在 base、cand、D 三组都有失败,是题目本身对 Haiku 的波动。
  • auto 模式抽查(Haiku medium,3 条手写提示,不计分):删除与建脚本拿到 MODE_FORBIDDEN 后如实转告用户,给出 Bypass 与允许列表两条路,没有改用直接写文件绕过;普通移动直接执行。

重发前的同日对照

(Claude Code 2.1.322 无头模式 + Haiku 5.5 · medium,Unity 2022.3.62f2 URP,ops / dev 的基础 + 标准共 25 题,每题 1 次;两组同一天、同一环境、同一编辑器):

被测代码 通过 处理 token/题 耗时/题 请求/题 失败调用/题 读过模块文档的题
首发 3.0.0(aa955d9d) 24 + 1 部分通过 248K 130 s 8.08 0.28 0
重发 3.0.0 25 246K 100 s 8.56 0.60 2

逐题配对的 token 差均值 −2.5K(t = −0.13),没有可分辨的差别。失败调用的 15 次里有 9 次来自 T4 一个会话:agent 自己猜了不存在的 component_get_serialized_property 并在循环里连调,题目仍通过。读了模块文档的两题是 T2(ui)和 T5(prefab),都是 schema 条目带 doc 的模块。上面「根文档重写后的复测」表里 medium 的 213K 是 11 月 7 日用 Claude Code 2.1.312 跑的 D 版候选;首发代码今天在 2.1.322 下是 248K。这 35K 的差距出现在首发之前(宿主版本和首发前最后几处文档微调都变了,没有再拆开测),不是这次重发带来的。

Added

  • Workflow:workflow_checkpoint、workflow_restore;写请求与 /skills/batch 可带 "_checkpoint":"<标签>";回退冲突返回 WORKFLOW_CONFLICT,conflicts:"keep" 跳过全部冲突,传 id 列表只覆盖列出的;属性级三方合并;scope 部分回退;workflow_restore、workflow_undo_task、workflow_redo_task、workflow_session_undo 支持 ?mode=dryRun,预览里带 danglingReferences 与 mayTriggerReload。
  • History 页:按检查点分组,可预览回退、撤销回退、按 agent 过滤;工具栏可开关自动检查点并设置空闲间隔。
  • 评测:Evaluation 页、/unity-skills-eval、随包评测器(Evaluation~,状态写在 Library/UnitySkills/eval/)、unity-evaluation 建议模块与 scripts/unity_eval.py、报告里的 grade 与 verdict。
  • Particle 模块(31 个技能):查询、配置、渲染器、爆发、子发射器与播放控制,写技能都有 _batch;没有粒子模块的工程返回 MISSING_PACKAGE。
  • 按工程保存的设置:令牌档位、运行模式、审批与允许列表、端口、超时、遥测、Workflow 历史上限与 Evaluation 配置写入 UserSettings/UnitySkills/settings.json,工程没有自己的值时沿用旧的全局值。
  • queryJson.underPath:共用查询新增「某路径下任意深度的后代」,一次调用盘点整棵子树,与 parentPath 同时给时取交集。
  • YooAsset 3.x 与 HybridCLR 9.x 支持:两个包都是新旧两条版本线同时可用,对外技能名和参数名不变。YooAsset 3.x 删除的 AssetArt 功能在 3.x 上如实报「已移除」;HybridCLR 9.x 删除的设置字段在读取时列为不支持、写入时拒绝并给出替代项。在 6000.3 与 2022.3 上分别实测了 YooAsset 3.0.7 / 2.3.19、HybridCLR 9.0.3 / 8.15.0;HybridCLR 两条线都装好 il2cpp_plus 后跑通了生成、AOT 引用与热更 DLL 拷贝的完整流程。
  • project_add_layer:在 Tags & Layers 里定义命名 Layer,可指定 8–31 的槽位或自动用第一个空槽,可经 Workflow 回退。
  • domainReload 重载耗时:/health 与 editor_get_state 报告本次编辑器会话的域重载次数与耗时;最近几次比开头慢 3 倍以上且不少于 10 秒时 restartRecommended 为 true,Agent 会请用户保存后重启 Unity,不自行关闭编辑器。
  • physics 层碰撞技能接受层名:physics_get_layer_collision / physics_set_layer_collision 新增 layer1Name / layer2Name,不存在的层名会列出已命名的层。
  • AI Config 页记住自定义安装路径;GET /analytics?agent= 按 agent 过滤;TARGET_NOT_FOUND 带 instance,能看出请求打到了哪个编辑器。
  • v2 schema 条目带 doc:UI、UIToolkit、Prefab、Animator、ShaderGraph、Particle 六个模块的 v2 schema 条目(/skills/schema?wire=v2、带 includeSchema 的 recommend)指向模块文档,共 164 个技能;v1 不变。v2 全量 schema 增大约 11 KB(约 1.7%)。
  • SKILL_NOT_FOUND 先给出正确技能:登记 120 个 agent 常编出来的错名(SkillMisnomers),例如 gameobject_move 的第一条建议是 gameobject_set_transform。
  • 文档一致性检查扩大:skill_inventory.py 核对参数表与 C# 签名(1184 个参数,实际漂移 1 处),--sync-tables 可回写;85 个模块入口有字节预算;CI 新增 skill-inventory-check。

Changed

  • 模块入口改名:skills/<module>/SKILL.md → MODULE.md,skills/SKILL.md → skills/INDEX.md,去掉 frontmatter。发现器不再把每个模块入口注册成独立 skill(Codex CLI 0.163.0 实测 87 条 → 1 条);安装器会清掉旧副本里的旧文件名。
  • 只写在模块文档里的规则搬进 schema:55 个 REST 模块逐条审计,46 条规则写进技能描述、参数说明与报错文本(29 个 *Skills.cs)。
  • 删除 references/ 下 19 个 URL 索引文件;安装器会从旧副本里清掉。
  • 文档:根 SKILL.md 按上文重构并加入 advisory 路由;85 个模块文档统一为英文的同一骨架(入口指向 GET /skills/schema,删去重复根文档的样板),逐条对照 C# 订正参数、返回字段与错误码;Workflow 模块文档改为「检查点优先」。
  • editor_run_scenario 与 component_invoke_method 的 logWindow:只有 Error / Exception / Assert 条目保留 stackTrace,其余条目不再带堆栈;failureLogWindow 不变。
  • name 可以写层级路径:name 含 / 且没有对象恰好叫这个名字时按路径查找,resolutionNotes 里注明;精确同名仍然优先,parentName、childName 与 batch dryRun 预检同样处理。
  • 根 SKILL.md 的 dryRun 范围收窄:只在删除(operation 含 Delete)、除脚本写入外会触发重载的技能、非事务多步 batch、approval 模式或拿不准时先 dryRun;script_create / script_append / script_replace 直接执行(校验失败什么都不执行,返回与 dryRun 相同的报告),scene_save、editor_play 这类拿到签名后直接执行。
  • 错误与预览里的提示:MISSING_PACKAGE 的第一条修复建议改为 ask_user,装不装由用户决定;MODE_FORBIDDEN 写明只有用户能解除(Bypass 或允许列表);dryRun v2 的 note 说明 valid:true 的含义,没有规划器的技能注明「target was not looked up」;waitUrl 带上 expectInstance,端口换人后照原样 GET 会得到 409。
  • Unity CLI 对齐 1.0.0-beta.17:--args 改为一个带引号的字符串;命令清单改为白名单;beta16 起 build 会借用已打开的 Editor,构建前先做存活检查;CLI 的通知与提示只转述不执行;退出码按 beta6–13 / beta14+ 分段;新增冷启动卡住时的 status 诊断、commands --grep、build --list-targets / --list-profiles 与 UnityCliConfig.json 说明;Unity 官方 agent 技能只作参考。版本探测清掉继承的 UNITY_FORMAT 并校验输出格式;Windows 增加 UNITY_CLI_HOME 与 %LOCALAPPDATA%\Unity\bin 候选路径(未在 Windows 实测);面板安装命令加 UNITY_CLI_SKIP_SETUP=1(beta16 之后是否仍生效未验证)。
  • 可选包版本不在支持范围时如实报错:不再说「未安装」或建议装旧版,而是写明已装版本和支持范围,换不换版本由用户决定。NGO 3.x 需要 Unity 6000.7,本版尚未适配,可钉 2.13.3。
  • netcode_set_debug_simulator:UnityTransport 的 debug simulator 自 NGO 2.2.0 起已无效,技能改为报错并指向 Multiplayer Tools 的 Network Simulator。
  • Workflow 存储:Library/UnitySkills/workflow/ 下的 log.jsonl、head.json 与按内容寻址的 blobs/;按容量(默认 512 MB)与天数(默认 30 天)整段清理。
  • 撤销与重做改走回退引擎:只恢复指定步骤的目标,其他目标上的后续工作保留;workflow_redo_task 改为撤销某次回退本身。
  • workflow_list 返回紧凑文本行,检查点穿插其中;什么都没改的调用不再留下步骤。
  • entityId 定位更严:给定的 entityId 或非零 instanceId 找不到就返回 TARGET_NOT_FOUND,不再退回同名对象;核心与可选包模块原生声明 entityId 参数,批量项同样支持。
  • 显式分页在任何详略级别下生效;gameobject_find、scene_find_objects、batch_query_* 返回 totalMatched 与 truncated。
  • 新安装默认 Full 令牌档位;scene_save 的撤销在场景关闭时恢复磁盘文件;编辑器变更日志分段轮转;安装器会删除模板已退役且未被改动的旧文件。
  • 面板换成石墨配色,控件高度与圆角统一。

Fixed

  • 文档与代码不符的几处:SKILL_GUIDE.md 不再说默认是 Approval 模式(以 /health 的 currentMode 为准);references/windows.md 示例端口改为 <port>;console 文档默认值 "Log" 改为 "log";importer、validation、prefab 模块文档按代码订正;schema 各层体积按 873 技能重测(全量约 853 KB、v2 约 658 KB),briefHint 同步。
  • 查询串里的第二个 ?:?wait=90?expectInstance=X 以前把 wait 读坏、悄悄丢掉实例钉(评测中出现 4 次),现在 ? 也当分隔符。
  • 根 SKILL.md 写错了 auto 模式:旧文说 auto 下写操作直接执行,实际删除、重载、Play 模式与高风险技能会返回 MODE_FORBIDDEN,而新装默认就是 auto;protocol-operating-mode.md 的自相矛盾一并改正。
  • 装了新版可选包时误报「未安装」:YooAsset 3.x、NGO 3.x 下几乎所有技能都说未安装;HybridCLR 9.x 下状态技能返回空值,拷贝 AOT DLL 报成功却没复制。
  • YooAsset 2.x 版本区间会把 3.0.0-beta 算进去,导致整个插件编译失败;每条线改为锁到一个小版本,下一个小版本的预发布版也排除在外。
  • ISO 时间字符串被改写(v2.9.1 起):请求参数里的 ISO-8601 时间以前被转成本地格式,console_get_logs 的 fromUtc / toUtc 因此一律被拒;直接调用、dryRun、batch 步骤与 *_batch 条目现在都原样收到字符串。
  • batch dryRun 把前面步骤要加的组件或要建的对象判为不存在:现在改为警告;component_set_property 还认得 RequireComponent 带上的组件;light_create、ui_create_* 这类 dryRun 不预测对象的创建技能建的对象,后续步骤也能按名字引用。
  • 域重载期间的空 200:排队未执行的请求现在返回 503(details.executed:false),写入后断开返回 504;Python 客户端不再重发结果未知的写请求。
  • Console 历史:满后不再每秒整份重写(#65),每条记录只序列化一次,压缩时按字节复制旧文件里留下的行;域重载只解析历史末尾约 1 MiB,34.5 MB 历史每次重载约少 530 ms。
  • editor_run_scenario:用户日志超过 1000 条时不再误判覆盖不完整,Error / Exception / Assert 在整个窗口内单独检索(resultData.failureLogWindow)。
  • 未存盘的材质 / ScriptableObject 撤销不生效;未保存场景里撤销只恢复一个对象。
  • component_invoke_method 的短类型名歧义;事件、引用、预制体与隐藏属性的一批定位和读取问题(P4–P14);Unity 6000.4+ 活动场景根物体缺失(#66)。
  • 回滚后变更日志里的「无名删除」:transactional 批处理失败回滚时,同一请求里刚创建又被撤掉的物体,以前会在变更日志里留下没有路径的 gameobject_destroyed,评测判分会把它当成越界修改;现在这种创建与删除成对丢弃,不再记录。
  • 评测「全部题目」的提示词:开头跟随所选的提示语言,并写明当前渲染管线可跑的题数、会话数和被排除的题。以前开头固定英文,写着 "all tracks and tiers",Built-in 工程只跑 12 题时,Agent 会报告题数对不上。/unity-skills-eval 跑全部题目时遇到 PIPELINE_UNSUPPORTED 会跳过该等级继续。
  • editor_run_scenario 单步耗时随作业历史变长:每一步都重写整个作业状态文件,文件 20 MB 时每步 152 ms,计时类断言因此误判;现在只读步只更新内存,同样 20 MB 下每步 2 ms。
  • 长会话里 Play Mode 场景误报超时:editor_run_scenario 的 timeoutSeconds 以前把进入 Play Mode 的那次域重载也算进去,长会话里这次重载要 17–25 秒,场景还没跑第一步就超时;现在进入 Play Mode 另有 300 秒上限,timeoutSeconds 从场景开始运行时计时。脚本有编译错误、进不了 Play Mode 时,场景直接返回错误,不再等满上限。
  • Workflow 与 ProjectSettings:加载历史时不再清掉 ProjectSettings/ 下资产的快照路径,也不再每次域重载逐条告警;回退这类资产后立即写盘,不再出现接口报已回退、文件仍是旧值。
  • 回退会改写只读包里的资产(如 URP 的 Lit.mat):registry、git 与内置包里的资产不再快照。
  • Workflow 内存:回退与预览读回的快照用完即释放;删除文件夹时流式备份,不再整份读入内存;单步超过 500 个对象时如实报告跳过的数量。
  • Play Mode 下 scene_save / scene_unload 返回 SEMANTIC_INVALID 并指向 editor_stop,不再报 INTERNAL。
  • 冷启动后 REST 偶尔一直不起来:没获得焦点的编辑器可能长时间不跑 update 循环。wait_for_health 现在等 45 秒仍无响应、且编辑器进程还开着该工程时,会在 macOS 上把这个编辑器的窗口切到前台一次(wake_after=0 关闭)。
  • 序列化引用每项扫描全部类型:objectType 是 Material 这类非组件类型时,20 项的批处理从约 20 秒降到 0.3 秒。
  • 评测判题与框架:T9 按路径定位;OC8 在全新工程上首跑 teardown 不再失败;DC6 还原它改过的物理设置;提交时题包校验失败也会完成 teardown。DC4 在 Unity 6 上能正常搭建。
  • NGO 文档与警告中关于 PlayerPrefab 的错误说法已改正。
  • 面板窗口很矮时,Token 等级徽标被压成扁椭圆。
  • 替换底部钉选语言后,两个语言按钮都不高亮。
  • 写完立刻读审计日志(GET /permission/audit、审计面板)时,偶尔读不到最新一条;记录不丢,下次读取就有。

Compatibility

  • Unity 2022.3+。CI 在 2022.3.62f1、6000.0.76f1、6000.2.11f1、6000.3.18f1、6000.4.12f1、6000.5.11f1 上的 EditMode 全部通过。
  • 升级必读:
    • 3.0 之前的 Workflow 历史不迁移,会移到 workflow_legacy/,14 天后自动删除,History 页可手动删除;
    • 给定 entityId / 非零 instanceId 找不到时不再退回同名对象;
    • 新装默认 Full 令牌档位,已有安装保留原设置;
    • 设置优先读当前工程的 UserSettings,没有时回落旧的全局值。
    • 已装首发 3.0.0(2026-11-11)的用户:见文首"2026-11-12 重发",需重新拉包并手动重装 Skill。
  • 可选包版本范围:YooAsset [2.3.15,2.4.0-0) 与 [3.0.4,3.1.0-0);HybridCLR 8.12 起的 8.x 与 9.x(不含 10.0 的预发布版);NGO 2.x(3.x 需要 Unity 6000.7,未适配)。
  • 技能 839 → 873(+34),没有删除任何技能。
  • logWindow.logs[] 里的 Log / Warning 条目不再带 stackTrace;依赖它的脚本请改读 failureLogWindow 或 Console 技能。
  • 题包声明的最低插件版本为 2.9.1;Evaluation 页与 /unity-skills-eval 需要 3.0.0。题包在 Unity 2022.3 URP 与 6000.3 URP 上都完成了 41/41 验证。发布前最后一次修改了 runner 的提交失败路径,它计入所有题的 gate 哈希,使 39 题的 gate 过期;两个版本都已全部重跑。

完整更改日志见 https://github.com/Besty0728/Unity-Skills/blob/main/CHANGELOG.md