Sprite Sheet 导出|一键打包给 Unity / Godot 的精灵图集
Sprite Sheet 是什么
Sprite Sheet(精灵图集)是把动画的所有帧拼成一张网格大图:
┌─────┬─────┬─────┬─────┐
│ 帧1 │ 帧2 │ 帧3 │ 帧4 │ ← 走路循环的 4 帧排成一行
├─────┼─────┼─────┼─────┤
│ 帧5 │ 帧6 │ 帧7 │ 帧8 │ ← 攻击动作的 4 帧排成第二行
└─────┴─────┴─────┴─────┘
游戏引擎不会直接导入 GIF 来做动画——GIF 文件体积大、帧时长不稳定、不支持半透明。所有主流游戏引擎(Unity / Godot / GameMaker / Unreal)都统一用 Sprite Sheet + 元数据的方式来加载和播放像素动画。
Aseprite 的 Sprite Sheet 导出是它最强大的导出功能之一——支持多种布局 + JSON/XML 元数据,引擎拿到就能直接用,不需要手动切片。

怎么导出
桌面版
- File → Export → Sprite Sheet
- 在弹出的对话框里选择:
- Layout(布局):Horizontal / Vertical / Grid / By Tag
- Max Size:如果贴图太大,可以限制每列/每行的最大尺寸(用于移动端优化)
- Padding:帧与帧之间加几像素空白
- Merge Duplicates:自动去掉内容相同的重复帧(节省空间)
- 勾选 Export JSON data(或 XML)→ 引擎读这个文件自动获取帧信息
- 选保存位置,导出
安卓端
画板完成后找"精灵表导出"选项,布局选择可能简化。
四种布局详解
| 布局 | 效果 | 适合 |
|---|---|---|
| Horizontal(水平) | 所有帧排成一行 | 帧不多时,引擎最容易处理 |
| Vertical(垂直) | 所有帧排成一列 | 单列方便,不常用 |
| Grid(网格) | 指定每行几帧(Columns),自动换行 | 多帧动画,最常用 |
| By Tag(按标签) | 同一标签的帧放一起,不同标签分块 | 一个文件有多段动作(走路/攻击/待机) |
推荐 Grid 或 By Tag——Horizontal 在帧数多的时候会变成一条超长的图片,有些引擎加载会有问题(GPU 有最大纹理尺寸限制)。
元数据导出(重要)
一定要勾选 JSON 或 XML 导出。Aseprite 导出的 JSON 包含:
{
"frames": {
"walk/1": { "frame": {"x": 0, "y": 0, "w": 32, "h": 32} },
"walk/2": { "frame": {"x": 32, "y": 0, "w": 32, "h": 32} }
},
"meta": {
"image": "character-walk.png",
"size": { "w": 128, "h": 32 },
"frameTags": [
{ "name": "walk", "from": 0, "to": 7, "direction": "forward" }
]
}
}
引擎(Unity / Godot)可以自动读取这个 JSON——帧尺寸、标签名、播放方向,全部自动配置好,不用手动切片。
帧尺寸统一——最容易被忽略的细节
Sprite Sheet 导出能自动切片的前提是所有帧的画布尺寸相同。如果你中途改过画布尺寸(比如从 32×32 改成 48×48),导出的 Sprite Sheet 里不同帧可能大小不一样——引擎切片时会错位。
检查方法:导出前在 Aseprite 里按帧浏览,或者导出后打开 Sprite Sheet 手动核对每格宽度是否一致。
贴图尺寸优化
移动端游戏有GPU 最大纹理尺寸限制(常见是 2048×2048 或 4096×4096)。如果 Sprite Sheet 太大超过限制,引擎加载会出问题。
Aseprite 导出时:
- 设置 Max Size:限制每列/每行最大像素数
- 勾选 Merge Duplicates:去掉相同帧减少尺寸
- 如果还是太大:把不同标签的动作拆成多个 Sprite Sheet(每个 Sprite Sheet 只放 1~2 段动作)