乐于分享
好东西不私藏

当 AI 学会操作 Unity 编辑器:CodeBuddy + UnitySkills 自动化实战

当 AI 学会操作 Unity 编辑器:CodeBuddy + UnitySkills 自动化实战

你有没有想过,让 AI 直接帮你改 Prefab、加组件、绑引用,而不是自己一个个拖拽?


一个真实的场景

想象一下这个场景:

你在开发一个社交功能,评论面板 UIRedBookCommentsPanel 里的输入框 InputLabel 缺了一个 UILabel 组件。UIInput 的 label 引用是空的,characterLimit 是 0,输入框根本没法显示文字。

如果按传统方式,你需要:

    这还不算中间来回切换窗口、查找字体路径、确认参数的时间。

    但如果 AI 能直接操作 Unity 编辑器呢?


    什么是 UnitySkills

    UnitySkills 是一个 Unity 编辑器插件,它在编辑器内启动了一个REST API 服务(默认端口 8090),暴露了 750+ 个技能接口。

    简单来说,它是一座桥梁:

    AI(CodeBuddy) ←→ HTTP REST API ←→ Unity 编辑器

    AI 可以通过 HTTP 请求让 Unity 执行各种操作:

    这不是模拟操作,而是真实的编辑器调用——和你在 Inspector 面板里操作的效果完全一样。


    工作原理:三层架构

    整个系统分三层:

    ┌─────────────────────────────────────────┐│ CodeBuddy AI(大脑) ││ · 理解用户需求 ││ · 分析代码和 Prefab 结构 ││ · 规划操作步骤 ││ · 构造 REST API 调用 │└──────────────────┬──────────────────────┘ │ HTTP POST ▼┌─────────────────────────────────────────┐│ UnitySkills REST 服务 ││ · 监听 localhost:8090 ││ · 接收技能调用请求 ││ · 权限校验(Auto/Approval/Bypass) ││ · 队列执行、Domain Reload 恢复 │└──────────────────┬──────────────────────┘ │ C# API ▼┌─────────────────────────────────────────┐│ Unity 编辑器(执行者) ││ · GameObject.AddComponent() ││ · SerializedObject 修改属性 ││ · PrefabUtility.ApplyOverride() ││ · AssetDatabase.Refresh() │└─────────────────────────────────────────┘

    关键点:AI 不是在”猜”修改,而是通过 REST API 让 Unity 真实执行操作,结果和手动编辑完全一致。


    实战流程:补全 InputLabel 组件

    以我们这次的实际操作为例,完整流程是这样的:

    第一步:分析现状

    AI 先读取 Prefab 文件(YAML 格式),发现:

    • InputLabel 只有 Transform + UIInput 两个组件
    • UIInput.label = {fileID: 0}(空引用)
    • UIInput.characterLimit = 0(无限制)
    • 没有关联的 UILabel,输入框无法显示文字

    同时读取 C

    代码,发现 IsInputReachLimit() 依赖 characterLimit 字段,OnClickFaceItem 也有长度检测逻辑。

    第二步:查找参考

    AI 在同一个 Prefab 里找到了 ShowTipsLabel,它的 UILabel 使用:

    • 字体:fzzzhjt_m(TrueType Font)
    • 字号:28
    • 深度:10

    以此作为 InputLabel 的 UILabel 配置参考。

    第三步:执行修改(REST API 调用)

    AI 通过 UnitySkills API 执行以下操作序列:

    1. prefab_instantiate  实例化 Prefab 到场景2. component_add  给 InputLabel 添加 UILabel 组件3. component_set_property  设置 trueTypeFont = fzzzhjt_m4. component_set_property  设置 UIInput.label 引用  UILabel5. component_set_property_batch  批量设置 fontSize/depth/width/height/characterLimit6. prefab_apply  将修改 Apply 回 Prefab 源文件7. asset_refresh  刷新 AssetDatabase,确保写入磁盘8. gameobject_delete  删除临时实例

    第四步:验证结果

    AI 重新读取 Prefab 文件,确认:

    • m_Component 列表新增了第 3 个组件引用 ✅
    • label: {fileID: 2030975855698431939} 指向新增的 UILabel ✅
    • characterLimit: 200 ✅
    • UILabel 的 mTrueTypeFont、mFontSize、mDepth、mWidth、mHeight 全部正确 ✅

    整个过程,用户只需要说一句话,确认几次操作即可。


    权限模型:三档安全模式

    UnitySkills 提供了三档权限模式,在 Window > UnitySkills > Server 中配置:

    在 Auto 模式下,AI 会自我评估:

    • 批量操作 ≥ 5 个对象时,先告知用户计划
    • Prefab Apply / 场景修改前,说明风险
    • 不可逆操作(删除等),必须用户确认

    这保证了自动化的同时,用户始终拥有控制权。


    进阶:批处理脚本,一次确认搞定

    每次 REST API 调用都需要用户确认一次命令执行,操作步骤多时会很繁琐。

    为此,我们创建了一个批处理脚本,将多步操作合并为一次调用:

    .codebuddy/skills/unity-skills-helper/scripts/unity_batch.ps1

    工作方式

      对比效果

      JSON 格式清晰描述每一步:

      { ”operations”: [ {”label”: ”实例化Prefab”, ”skill”: ”prefab_instantiate”, ”args”: {”prefabPath”: ”Assets/...”, ”name”: ”EditTemp”}}, {”label”: ”添加UILabel”, ”skill”: ”component_add”, ”args”: {”path”: ”EditTemp/Bottom/InputLabel”, ”componentType”: ”UILabel”}}, {”label”: ”设置字体”, ”skill”: ”component_set_property”, ”args”: {”path”: ”...”, ”componentType”: ”UILabel”, ”propertyName”: ”trueTypeFont”, ”assetPath”: ”Assets/StaticResources/Font/fzzzhjt_m.ttf”}}, {”label”: ”Apply到Prefab”, ”skill”: ”prefab_apply”, ”args”: {”name”: ”EditTemp”}}, {”label”: ”刷新保存”, ”skill”: ”asset_refresh”, ”args”: {}}, {”label”: ”清理临时实例”, ”skill”: ”gameobject_delete”, ”args”: {”name”: ”EditTemp”}} ]}

      脚本还内置了Domain Reload 自动恢复——当 Unity 编译脚本导致服务短暂中断时,脚本会自动等待重试,无需手动干预。


      核心优势

      1. 代码与 Prefab 同步修改

      传统流程中,改完代码后要手动去 Unity 里调 Prefab,容易遗漏。AI 可以同时分析代码和 Prefab,确保两者一致。

      比如这次,AI 不仅补全了 Prefab 里的 UILabel,还发现代码里 IsInputReachLimit() 依赖 characterLimit,于是同时设置了这个值。

      2. 自动查找参考

      AI 可以搜索整个项目,找到同类的 UILabel 配置作为参考,自动复制字体、字号、颜色等设置。不需要手动去翻其他 Prefab。

      3. 修改即验证

      每次修改后,AI 可以立即重新读取 Prefab 文件,确认修改已写入磁盘。不像手动操作容易忘了 Apply 或 Save。

      4. 全流程留痕

      所有操作通过 REST API 执行,UnitySkills 会记录审计日志。每一步做了什么、改了哪个对象、设置了什么值,都有据可查。

      5. 容错恢复

      Unity 编译脚本时会发生 Domain Reload,REST 服务会短暂中断。UnitySkills 内置了恢复机制,批处理脚本也有自动重试逻辑,不会因为编译中断而丢失操作。


      适合的场景


      局限性

      坦率地说,也有一些局限:


        写在最后

        AI 操作 Unity 编辑器不是噱头,而是实实在在的效率工具。

        以前补全一个 InputLabel 组件,要打开 Unity、找 Prefab、加组件、设属性、绑引用、Apply、存盘,来回切换至少 5-10 分钟。

        现在,告诉 AI 你要做什么,确认一次操作,30 秒搞定。而且每一步都有记录、可验证。

        AI 不替代你思考,但替代你做那些重复、繁琐、容易出错的体力活。

        这才是 AI 辅助编程的正确打开方式。


        本文基于 CodeBuddy + UnitySkills v2.1.3 + Unity 2022.3.56f1 的实际操作经验编写。