unity-SpriteAtlas图集
Posted 蝶泳奈何桥.
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了unity-SpriteAtlas图集相关的知识,希望对你有一定的参考价值。
title: unity-SpriteAtlas图集
categories: Unity3d
tags: [unity, 图集]
date: 2022-01-10 14:29:00
comments: false
mathjax: true
toc: true
unity-SpriteAtlas图集
前篇
- Sprite Atlas - https://docs.unity3d.com/cn/2018.4/Manual/class-SpriteAtlas.html
- 自动创建SpriteAtlas并设置图集资源 - https://www.jianshu.com/p/bdd223184738
- SpriteAtlas与AssetBundle最佳食用方案 - https://cloud.tencent.com/developer/article/1765934
创建 图集
-
创建.
-
手动创建. 右键 -> create -> sprite atlas, 然后拖入需要打图集的 文件/文件夹
-
代码创建
public static SpriteAtlas CreateAtlas(string output, TextureImporterFormat tif) SpriteAtlas atlas = new SpriteAtlas(); // 设置参数 可根据项目具体情况进行设置 SpriteAtlasPackingSettings packSetting = new SpriteAtlasPackingSettings() blockOffset = 1, enableRotation = false, enableTightPacking = false, padding = 2, ; atlas.SetPackingSettings(packSetting); SpriteAtlasTextureSettings textureSetting = new SpriteAtlasTextureSettings() readable = false, generateMipMaps = false, sRGB = true, filterMode = FilterMode.Bilinear, ; atlas.SetTextureSettings(textureSetting); AssetDatabase.CreateAsset(atlas, output); return atlas;
-
-
大概就是这样设置
-
网上很说不要勾选 Include In Build, 说勾选了会有冗余的一份散图打进去, 实际上这个Bug早已经在 Unity2018.4.6 中修复了, 所以我们在使用中放心大胆地勾选 Include In Build 就好了
-
打成 AssetBundle
将 xxx.spriteatlas 图集文件打成 ab 后, 引擎需要根据 每个人自定义加载 方式加载 ab 后, 回调回引擎, 不然会出现图片是 空白 的情况
需要添加 SpriteAtlasManager.atlasRequested
, 不添加的会会报错: spriteatlasmanager.atlasrequested wasn't listened to while xxx requested
添加 atlasRequested
-
代码
using UnityEngine; using UnityEngine.U2D; public class AtlasLoader : MonoBehaviour void OnEnable() SpriteAtlasManager.atlasRequested += RequestAtlas; void OnDisable() SpriteAtlasManager.atlasRequested -= RequestAtlas; void RequestAtlas(string tag, System.Action<SpriteAtlas> callback) // 1. 自定义加载 ab 的逻辑. (这里最好不要用异步加载的方式, 否则会闪现一下空白图片, 因为此时资源还未被加载出来) string path = string.Format("Assets/Res/SpriteAtlas/0.spriteatlas", tag); SpriteAtlas sa = (SpriteAtlas) ResourceMgr.Instance.LoadAsset(path, typeof(SpriteAtlas)); // 2. 加载完 SpriteAtlas 回传给引擎 callback(sa);
打包方式
- 旧方式把 某个 图片 文件夹打成一个 ab 的还是要的, 原有的资源加载方式都不变.
- 只是新增了将 xxx.spriteatlas 打成 ab. 然后运行时回调 atlasRequested 加载这个 ab 回传给 引擎 即可.
资源对比
新打包方式
-
图集 ab
-
cards.assetbundle.manifest 里面记录了引用的 图片文件夹 ab
... Assets: - Assets/Res/SpriteAtlas/cards.spriteatlas Dependencies: - E:/its/tdmj_itc/patch/temp_patch_root/tdmj/common/resource/assets/res/ui/atlas/cards.assetbundle
-
-
图片文件夹 ab
-
cards.assetbundle.manifest 里面记录了引用的 图片资源
... Assets: - Assets/Res/UI/Atlas/cards/11.png - Assets/Res/UI/Atlas/cards/15.png Dependencies: []
-
AssetStudio 分析 cards
-
unity profiler 中内存快照
多出来几个 xxx.spriteatlas 所在 ab
-
旧打包方式
-
图片文件夹 ab
-
cards.assetbundle.manifest 里面记录了引用的 图片资源
... Assets: - Assets/Res/UI/Atlas/cards/11.png - Assets/Res/UI/Atlas/cards/15.png Dependencies: []
-
AssetStudio 分析 cards
-
结论
-
AssetStudio 可以看出, 新的方式的 图集是打到 xxx.spriteatlas 所在的 ab 中.
-
unity profiler 中内存快照看到多出了
-
使用新的 SpriteAtlas 图集方式可以随时预览某个图集
以上是关于unity-SpriteAtlas图集的主要内容,如果未能解决你的问题,请参考以下文章
Unity 之 图集属性详解和代码示例 -- 拓展一键自动打包图集工具