用途
Sprite Editor 用于编辑 Unity 精灵的元数据,包括矩形(rects)、边框(borders)、轴心(pivots)、轮廓(outlines)和切片(slicing)。当用户处理精灵图集或精灵切片时使用该技能。
精灵元数据存储在导入器内部,而不是一个可以直接编辑的文件中,因此要访问它必须通过实时 Editor 运行 C#。
前置条件
unity-cli 技能负责完成前置准备:安装 CLI、确认已连接 Editor、添加项目的 com.unity.pipeline 包、区分真正缺失的 Editor 与卡在安全模式(Safe Mode)的 Editor,以及发现 Editor 的命令目录。应先遵循该技能,不要在此重复推导。
有两件事它无法替你确认:
- 你需要的是 eval 命令,而不仅仅是一个可连接的 Editor。确认它出现在命令目录中——它的存在取决于 Pipeline 包版本,而非 CLI。
- 绝不要手动编辑 .meta 文件来更改精灵元数据。导入器拥有该数据,下面的能力检查正是为了防止损坏,因此无法连接 Editor 时应停止,而不是即兴发挥。
使用方式
通过 eval 命令在已连接的 Editor 中运行 C#。从 unity command --format json 发现其参数形态,而不要假设。内联形式为:
unity command eval --caller plugin --skill sprite-editor --code '<snippet>'
某些 Pipeline 版本还会注册 eval_file 用于从文件运行代码片段。在尝试 eval_file 之前先检查命令目录;它经常不存在。unity command 默认超时为 30 秒。
该技能生成 C# 编辑器脚本,使用 ISpriteEditorDataProvider 操作 Unity 精灵,兼容 TextureImporter、PSBImporter 和自定义导入器。
向 eval 传递 C#
eval 编译的是语句块,而不是文件。由此产生两个后果,二者都会导致编译错误而非警告:
- 不能有 using 指令。编译器会把
using UnityEngine;当作资源释放语句并拒绝(CS0210)。 - 类型必须完全限定。裸写的 AssetDatabase 或 Volume 无法解析(CS0246 / CS0103),裸写的 Object 会与 object 产生歧义(CS0104)。
当下面的代码片段以文件形式书写(为可读性带有 using,或因为它需要保存到项目中)时,在传给 eval 之前先限定类型。
工作流程
所有生成的脚本必须遵循 references/templates.md 中的安全核心模式(Safe Core Pattern),其中包含强制性的能力检查。能力检查失败时绝不尝试操作——这可以防止数据损坏。执行后,在 Unity 控制台和 Project 窗口中验证结果。
常见操作
- 修改名称/矩形/边框/轴心:更新对应的 SpriteRect 字段(轴心示例见 scripts/SetPivotExample.cs)。需要:EditSpriteName、EditSpriteRect、EditBorder 或 EditPivot。
- 添加/删除/切片:创建或过滤 SpriteRect 数组(Unity 2021.2+ 的要求见 references/background.md)。需要:CreateAndDeleteSprite。
- 设置轮廓:获取 ISpriteOutlineDataProvider → 使用 GUID + Vector2 数组调用 SetOutlines()。
重要说明
- 不要使用 AssetPostprocessor 或 MenuItem 模式。
- 只生成独立代码片段——不要 AssetPostprocessor,不要 MenuItem。
- 枚举赋值:始终使用枚举值并强制转换为数值类型,绝不要使用原始数字。
- 正确:
(int)SpriteAlignment.Center - 错误:
1(魔法数字)
- 正确:
适用场景
适用于需要以编程方式修改 Unity 精灵元数据的场景,例如批量调整精灵图集中的矩形、边框、轴心,或对精灵进行切片和轮廓设置。
限制
- 依赖已连接的实时 Editor 和可用的 eval 命令。
- 无法连接 Editor 时应停止操作,不得手动编辑 .meta 文件。
- eval 编译语句块,不支持 using 指令,类型必须完全限定。
- 能力检查失败时不得执行操作。
- unity command 默认超时为 30 秒。
- 关于收费、价格、平台等具体信息暂未提供。