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

创建 图集

  1. 创建.

    1. 手动创建. 右键 -> create -> sprite atlas, 然后拖入需要打图集的 文件/文件夹

    2. 代码创建

      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;
      }
      
  2. 大概就是这样设置

    • 网上很说不要勾选 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

  1. 代码

    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);}
    }
    

打包方式

  1. 旧方式把 某个 图片 文件夹打成一个 ab 的还是要的, 原有的资源加载方式都不变.
  2. 只是新增了将 xxx.spriteatlas 打成 ab. 然后运行时回调 atlasRequested 加载这个 ab 回传给 引擎 即可.

资源对比

新打包方式
  1. 图集 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
  2. 图片文件夹 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


旧打包方式
  1. 图片文件夹 ab

    • cards.assetbundle.manifest 里面记录了引用的 图片资源

      ...
      Assets:
      - Assets/Res/UI/Atlas/cards/11.png
      - Assets/Res/UI/Atlas/cards/15.png
      Dependencies: []
    • AssetStudio 分析 cards


结论
  1. AssetStudio 可以看出, 新的方式的 图集是打到 xxx.spriteatlas 所在的 ab 中.

  2. unity profiler 中内存快照看到多出了

  3. 使用新的 SpriteAtlas 图集方式可以随时预览某个图集


unity-SpriteAtlas图集相关推荐

  1. Unity UGUI图集专题

    一:图集介绍 什么是图集:我们可以将其理解为将一系列小图合并为一张大图.使用图集可以减少drawcall,提升效率. ​ 游戏中的图片模型最终是要给到显卡去渲染的,然后CPU通知GPU要开始渲染,这一 ...

  2. Unity 打包图集

    Unity打包图集 public class MyTexturePak {private const string intPutPath = "/Emoji/Input/";pri ...

  3. Unity一键图集生成工具,附源码 (基于NGUI和TexturePacker)

    https://blog.uwa4d.com/archives/NGUI_SplitChannels.html Unity一键图集生成工具,附源码 (基于NGUI和TexturePacker) 作者: ...

  4. 【Sprite Atlas】Unity新图集系统SpriteAtlas超详细使用教程

    SpriteAtlas是Unity新出的一个功能,用来取代旧版的Sprite Packer. 图集打包的意义: 减少DrawCall 图集将图片打包为2的幂次方的素材大小,可以提升性能 减小包体大小 ...

  5. Unity 解决SpriteAtlas图集打包AssetBundle白图问题

    之前文档上说勾选了Include in build之后,就不需要自己增加一个Binding脚本,但是仍然会弹出警告,并且会出现白图现象 Tight Packing 勾选之后当Sprite有透明通道可能 ...

  6. Unity SpriteAtlas实战使用

    前言 图集计划使用sprite atlas,但是看了网上资料用于实战的有点少.自己总结下.Unity 版本2019.4.9f1 图集设置-Sprite Packer Mode Disabled:就是不 ...

  7. 2022-04-24 Unity UGUI5——图集

    文章目录 一.Drawcall 二.图集 一.Drawcall ​ 字面理解 DrawCall,就是绘制呼叫的意思,表示 CPU(中央处理器)通知 GPU(图形处理器-显卡) (一)DrawCall ...

  8. Unity shader图集Atlas下的UV坐标归一化转换

    unity中如果图片打入了图集中,在shader中取到的uv坐标默认是图集中的坐标,如果需要shader做一些类似流光的效果,需要转换成常用的0-1区间的归一化uv坐标,转换方法如下: 步骤一: C# ...

  9. Unity替换 图集

    替换图集 两个图集中有大量同名资源要替换 两个图集中有大量同名资源要替换 using System.Collections; using System.Collections.Generic; usi ...

  10. Unity UGUI图集打包与动态使用(TexturePacker)

    TexturePacker 在用UGUI时,我们需要将一个个小图打包成图集,然后将图集一次性加载以内存换取图片读取效率,即减小Drawcall. UGUI打包并使用图集有两种方法:一种是使用系统自带的 ...

最新文章

  1. Kruskal算法构造最小生成树
  2. IBM用量子计算机成功模拟分子,登上《自然》封面
  3. VisualSvn+TortoiseSVN的安装说明
  4. 使用nomad部署mysql
  5. android 弹窗圆角,Android 自定义底部圆角弹窗的实现
  6. Institute for Manufacturing virtual check in part 1
  7. ios下获取所有实体/虚拟网卡的信息,并以此判断设备所处的网络状态
  8. _欧冠F组第1轮,拉齐奥3-1大胜多特蒙德
  9. 企业绩效管理系统之平衡记分卡
  10. Shell数组以及排序算法
  11. python发送excel文件_Python操作Excel, 开发和调用接口,发送邮件
  12. c语言选择题题及答案,C语言选择题练习及答案.doc
  13. 固态硬盘是什么接口_机械硬盘和固态硬盘有什么区别?哪种硬盘好?
  14. C语言求最小公倍数和最大公约数三种算法(经典)----ACM
  15. 为了探究妹纸对内衣的喜好,我爬了淘宝内衣店的数据!
  16. 激光雷达与相机融合(五)-------ros实时版点云投影到图像平面
  17. 2022普通人做抖音的红利在哪里
  18. Python3一篇学会“图像处理”的基本操作
  19. 告诉你四川火锅的秘密配方
  20. python import turtle as t_Python turtle库的学习笔记

热门文章

  1. iOS应用图标AppIcon
  2. unity画线之模拟小球抛物线运动轨迹
  3. 宝塔linux面板负载状态过高,宝塔Linux面板负载状态CPU100%怎么解决
  4. 万字长文读懂SaaS的中国版图、问题及趋势
  5. esp8266启动报错 ets Jan 8 2013,rst cause:2, boot mode:(7,7)
  6. 斗破苍穹java_安卓斗破苍穹游戏源码
  7. IT工科女硕士-求职总结帖
  8. 【时间序列】时间序列基本概念总结
  9. Excel中VLOOKUP跨文件查找
  10. Struts2的OGNL表达式语言