切片(Slice)与角色定制|让 Sprite Sheet 能被游戏引擎按部件读
Slice 是什么
Slice 是 v1.3 新增的功能——把一张画布按矩形区域切分成多个命名的"块"。
┌─────┐
│ 头 │ ← 一个 Slice,名叫 "head"
├─────┤
│身体 │ ← 一个 Slice,名叫 "body"
├─┬─┤
│左│右│ ← 两个 Slice,名叫 "arm-L" / "arm-R"
└─┴─┘
导出 Sprite Sheet + JSON 后,Slice 信息会一起写入 JSON——Unity / Godot 等引擎可以按 Slice 名字自动把大图拆成多个小 Sprite,然后分别放到不同的 Sprite Renderer / Sprite2D 节点上。
最实用的场景:角色定制系统。一个角色可以拆成头、身体、武器三个 Slice——玩家选不同的头、不同的武器组合,Aseprite 导出一张大图,引擎按 Slice 自动切出三块,重新组合即可。
怎么创建 Slice
桌面版
- 选框工具(M) 框选你想做 Slice 的区域
- Edit → Slices → New Slice(或按快捷键 Shift+C)
- 给 Slice 起个名字(
head/body/arm-left) - 继续框选其他区域、继续创建 Slice
Slice 面板
Window → Slices 打开 Slice 面板——列出所有 Slice 的名字、位置 (x, y, w, h)。在面板里可以:
- 点击某个 Slice → 画布自动显示对应区域
- 双击名字 → 重命名
- 右键 → 删除
v1.3.15 新增了拖拽调整 Slice 边界和Edit → Copy & Paste 复制粘贴 Slice的功能——改 Slice 位置比以前方便。
Slice 和 Layer Group 的区别
| 概念 | 是做什么的 | 影响导出 |
|---|---|---|
| Slice | 画布空间的矩形区域划分 | ✅ 导出 JSON 时写入,引擎能按 Slice 切 Sprite |
| Layer Group | 图层层级的组织方式 | ❌ 导出 JSON 时不写入(只是帮你在 Aseprite 里整理图层) |
Slice 是空间上的切分(头在画布的哪个矩形区域),Layer Group 是时间上的组织(头的像素在哪个图层)。两者可以同时用。
Slice 在游戏引擎里的应用
Unity
Aseprite Importer 会自动读取 Slice 信息——在 Sprite Editor 里可以看到所有 Slice 已经被标记好,点击某个 Slice 区域就能单独选中它。Unity 的 Sprite Swap 功能可以让"身体"节点替换成不同 Slice。
Godot
Godot 4 导入 .ase 文件后,Slice 信息写入 JSON——可以通过脚本按名字获取不同 Slice 的 Texture2D:
var aseprite = preload("res://character.ase")
var head = aseprite.get_slice_texture("head")
var body = aseprite.get_slice_texture("body")
切片 vs 导出多个 PNG
| 方式 | 优点 | 缺点 |
|---|---|---|
| Slice 一张大图 | 只用一张 Texture Atlas,引擎加载效率高 | Slice 尺寸固定后不好改 |
| 导出多个独立 PNG | 灵活,每个部件独立文件 | 文件多了引擎加载慢、管理麻烦 |
角色定制系统推荐用 Slice 一张大图——引擎一次加载就拿到所有部件,内存里只占一张纹理的空间。