惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

酷 壳 – CoolShell
酷 壳 – CoolShell
H
Hacker News: Front Page
P
Palo Alto Networks Blog
T
ThreatConnect
Apple Machine Learning Research
Apple Machine Learning Research
博客园_首页
T
True Tiger Recordings
P
Privacy & Cybersecurity Law Blog
B
Blog
IT之家
IT之家
Last Week in AI
Last Week in AI
F
Full Disclosure
Hacker News: Ask HN
Hacker News: Ask HN
C
Comments on: Blog
Microsoft Azure Blog
Microsoft Azure Blog
C
Cybersecurity and Infrastructure Security Agency CISA
Microsoft Security Blog
Microsoft Security Blog
博客园 - 【当耐特】
N
News and Events Feed by Topic
NISL@THU
NISL@THU
腾讯CDC
雷峰网
雷峰网
Security Latest
Security Latest
李成银的技术随笔
M
Microsoft Research Blog - Microsoft Research
L
LangChain Blog
L
Lohrmann on Cybersecurity
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
C
Check Point Blog
Y
Y Combinator Blog
Recent Announcements
Recent Announcements
博客园 - Franky
N
News | PayPal Newsroom
V
V2EX
A
About on SuperTechFans
The Register - Security
The Register - Security
月光博客
月光博客
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Google Online Security Blog
Google Online Security Blog
MyScale Blog
MyScale Blog
Cisco Talos Blog
Cisco Talos Blog
Vercel News
Vercel News
WordPress大学
WordPress大学
C
Cyber Attacks, Cyber Crime and Cyber Security
The Hacker News
The Hacker News
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
爱范儿
爱范儿
A
Arctic Wolf
L
LINUX DO - 最新话题
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More

博客园 - 野生西瓜

[Unity 杂货铺] 游戏字体选择 - 野生西瓜 [Unity 杂货铺] 游戏项目的结构规划与初始化 [Unity 杂货铺] Git 配置与实践 [Unity 杂货铺] 引擎版本的选择 [Unity] 基础寻路算法 - 环境搭建 [Unity] 引擎脚本相关的字符串优化 [Unity] 基础寻路算法 - 代码实践 [Unity] 资源工作流程 - AssetPostprocessor [Unity] 资源工作流程 - ScriptedImporter [Unity] 资源工作流程 - 辅助工具 [Lua游戏AI开发指南] 笔记零 - 框架搭建 [GAME] [Civilization] 文明6字体及字体大小修改 [Unity] 编辑器运行中动态编译执行C#代码 [Unity] 在软件标题栏显示工作路径 [GAMEDEV] 个人开发如何找到合适的图片素材? [施工中] 博客导航 2021 的书 [BACKUP] Visual Studio Code 配置 [theHunterCOTW] 猎人荒野的召唤-一点资料
[Unity 杂货铺] SpriteAtlas 和 SBP 打包
野生西瓜 · 2026-04-04 · via 博客园 - 野生西瓜

1 前言

本文并非 Unity 图集的教程或者分享,只是记录下在使用 Unity SpriteAtlas 和 AssetBundle 构建时产生的疑问和排查过程。

内容凌乱,仅作备忘。

2 背景与提问

之前参与的项目使用的是一套自己编写的图集流程,与 Unity 引擎没有太大关联。

这次在试着自己开发项目的时候,使用了 Unity 的 SpriteAtlas,碰到了一些疑惑和想法

大概的提问流程如下,其实也是个人的思考过程和本文的大纲:

  1. uGUI 的 Image 组件是如何使用图集里的图片的?怎么才知道图片是来自图集的?
  2. 在加载UI预制体(Prefab)时,Unity 是在何处以及如何加载对应的 SpriteAtlas 的?
  3. 在 Unity 编辑器中使用 Sprite Atlas 时,Image 组件最终显示时,使用的是图集的纹理设置还是原始精灵的图片设置?调整压缩比例时应该修改哪个设置?
  4. 为什么 Image 组件不直接引用图集却能自动使用图集版本,如何强制使用原始精灵?
  5. 使用 Scriptable Build Pipeline (SBP) 打包一个 Sprite,验证 SBP 是否会自动将 Sprite 所属的图集打包进来
  6. 为什么 SBP 在只打包一个散图时,最终生成的 AssetBundle 里却包含了整个图集和其他散图的信息?

3 正文

在 Unity 中使用 Sprite Atlas 时,建议先阅读官方手册中的“精灵图集”一节以了解基础概念。网络上的相关文章则多聚焦于“Include in Build”和“late binding”这两块较为重要的内容说明。

3.1 uGUI 中的 Image 组件引用的是散图还是图集?

问题描述:

之前在开发项目,拼 UI 的过程中,从 Assets 中把 [图片A] 拖入到 Image 组件中时,我对在编辑器中看到的是哪一份图片感到困惑。

此时项目中可能是有两份 [图片A] 的,一份是原图散图,另一份在创建的图集 XXX.spriteatlasv2 中。

理论上分别修改散图和图集的压缩设置或者纹理格式,即可确认。实际测试发现好像改哪个都可以,又都不可以。

解决方案与调试说明:

实际上如果启用了 Sprite Atlas V2,在 Edit > Project Settings > Editor > Sprite Atlas > Mode 下拉菜单中,选择 Sprite Atlas V2 - Enabled。在此模式下,无论编辑器还是播放模式,Image 组件实际使用的都是图集中的纹理。这符合运行时最终的表现,便于在开发阶段预览真实效果。

但如果将 Mode 设置为 Enabled For Builds,则只在构建时才会打包精灵图集中。编辑器和播放模式将引用原始未打包的纹理。

另外根据官方说明,使用 V1 版本的 Sprite Atlas,在拼图时引用的也是原始源纹理,可能会对设计和运行时造成混淆(拼图时看着挺高清的,打包出来却变模糊了)。

如果将 Inspector 面板调到 Debug 模式,选中散图的 Sprite,是可以看到其 Sprite Atlas 属性的,即图集和子图之前其实是双向引用的。这也是在编辑和打包时,能从子图获取并加载图集的原因。

因此,建议在项目设置中确认 Sprite Atlas Mode 为 V2 并启用 Enabled 模式,同时在 Debug 模式下检查 Sprite 的归属,以确保所见即所得。

3.2 构建 SpriteAtlas 的 AssetBundle:为什么打包一个散图却带出了整个图集?

项目框架使用的是 SBP,而不是内置管线进行AB包的构建,这里先只讨论 SBP 的情况。

首先是照例向 AI 提问:

我想简单的打包一个 Sprite,看 Unity SBP 是否会自动将对应图集打包进来,理清整个打包流程,给我一段代码进行打包和阅读

可以得到一份调用 ContentPipeline.BuildAssetBundles 的简单代码,只传入一个子图的路径进行打包。

使用 AssetStudio 查看打包后的 bundle,可以看到如果你的图片包含在 SpriteAtlas 中的话,bundle 最终会包含整个图集和所有子图的信息。

SBP 的代码是透明的,可以一层一层点进去,看到它的构建过程,是像流水线一样的执行一个一个 IBuildTask 来完成 Bundle 的构建。而资源的依赖信息收集则在 CalculateAssetDependencyData 中进行。

建议使用较新版本的 SBP,旧版可能存在资源重复等已知问题。

4 参考资料

  1. Unity Sprite Atlas 文档:

Unity - 手册: 精灵图集

  1. Scriptable Build Pipeline 源码:

GitHub - needle-mirror/com.unity.scriptablebuildpipeline: The Scriptable Build Pipeline moves the asset bundle build pipeline to C#. Use the pre-defined build flows, or create your own using the divided up APIs. This system improves build time, fixes incremental build, and provides greater flexibility. 📦 [Mirrored from UPM, not affiliated with Unity Technologies.]

不同版本的 SBP 代码似乎有不小的变动,也许底层细节相同,但建议阅读较新版本的代码。