






















本文并非 Unity 图集的教程或者分享,只是记录下在使用 Unity SpriteAtlas 和 AssetBundle 构建时产生的疑问和排查过程。
内容凌乱,仅作备忘。
之前参与的项目使用的是一套自己编写的图集流程,与 Unity 引擎没有太大关联。
这次在试着自己开发项目的时候,使用了 Unity 的 SpriteAtlas,碰到了一些疑惑和想法
大概的提问流程如下,其实也是个人的思考过程和本文的大纲:
在 Unity 中使用 Sprite Atlas 时,建议先阅读官方手册中的“精灵图集”一节以了解基础概念。网络上的相关文章则多聚焦于“Include in Build”和“late binding”这两块较为重要的内容说明。
问题描述:
之前在开发项目,拼 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 的归属,以确保所见即所得。
项目框架使用的是 SBP,而不是内置管线进行AB包的构建,这里先只讨论 SBP 的情况。
首先是照例向 AI 提问:
我想简单的打包一个 Sprite,看 Unity SBP 是否会自动将对应图集打包进来,理清整个打包流程,给我一段代码进行打包和阅读
可以得到一份调用 ContentPipeline.BuildAssetBundles 的简单代码,只传入一个子图的路径进行打包。
使用 AssetStudio 查看打包后的 bundle,可以看到如果你的图片包含在 SpriteAtlas 中的话,bundle 最终会包含整个图集和所有子图的信息。
SBP 的代码是透明的,可以一层一层点进去,看到它的构建过程,是像流水线一样的执行一个一个 IBuildTask 来完成 Bundle 的构建。而资源的依赖信息收集则在 CalculateAssetDependencyData 中进行。
建议使用较新版本的 SBP,旧版可能存在资源重复等已知问题。
不同版本的 SBP 代码似乎有不小的变动,也许底层细节相同,但建议阅读较新版本的代码。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。