U3L8——Sprite Atlas 精灵图集制作

本章代码关键字

1
2
3
UnityEngine.U2D            //一部分2D内容的命名空间
SpriteAtlas //精灵图集类
spriteAtlas.GetSprite() //获取精灵图集的单个精灵

为什么要打图集

打图集的目的就是减少DrawCall 提高性能
具体DrawCall是什么在NGUI课程中已经详细讲解 ——> Drawcall
在2D游戏开发,以及UI开发中是会频繁使用的功能

在Unity中打开自带的打图集功能

在工程设置面板中打开功能
Edit——>Project Setting——>Editor
Sprite Packer(精灵包装器,可以通过Unity自带图集工具生成图集)
Disabled:默认设置,不会打包图集

Enabled For Builds(Legacy Sprite Packer):Unity仅在构建时打包图集,在编辑模式下不会打包图集
Always Enabled(Legacy Sprite Packer):Unity在构建时打包图集,在编辑模式下运行前会打包图集

Legacy Sprite Packer 传统打包模式 相对下面两种模式来说 多了一个设置图片之间的间隔距离
Padding Power:选择打包算法在计算打包的精灵之间以及精灵与生成的图集边缘之间的间隔距离
注意!这里的数字 代表2的n次方
(在2021LTS中以上选项不再存在)

Enabled For Build:Unity仅在构建时打包图集,在编辑器模式下不会打包
Always Enabled:Unity在构建时打包图集,在编辑模式下运行前会打包图集

Sprite Atlas 参数相关

image

  • Type:图集类型

    • Master:主图集

      • image

      • Include in Build:选中可以在当前构建中包含图集

      • Allow Rotation:选中此选项将在打包图集时对图片元素进行旋转,可以最大限度提高组合后的图集密度
        注意!!!如果是UI图集,请禁用此选项,因为打包时会将场景中UI元素旋转

      • Tight Packing:选中此选项在打包图集时使用图片轮廓来打包而不是根据矩形,可以最大限度提高组合后的图集密度

        注意!如果是UI图集,视情况可能需要禁用此选项,在老版本中这个选项可能会带来意想不到的问题

      • Padding:图集中各图片的间隔像素

    • Variant:变体类型的图集

      • image
      • Master Atlas:关联的主图集 (图集类型必须是Master)
      • Include in Build:选中可以在当前构建中包含图集
      • Scale:设置变体图集的缩放因子(0~1),变体图集的大小是主图集乘以Scale的结果
      • 变体图集的主要作用是以主图集为基础,对它进行缩放产生一个新的图集副本。
        如果想使用变体图集中的内容,只需要勾选变体图集的Include in build选项,而主图集禁用此选项即可
  • Read/Write Enabled:允许通过脚本访问纹理数据。如果启用,会创建纹理数据的副本。会让内存翻倍,一般情况下不需要开启它

  • Generate Mip Maps:勾选它会生成Mipmap;Mipmap是一种性能优化手段,用内存换性能。2D游戏一般情况下不用开启

  • SRGB:启用此属性可指定将纹理存储在伽马空间中。对于非 HDR 颜色纹理(例如反照率和镜面反射颜色),应始终选中此复选框。如果纹理存储了有特定含义的信息,并且您需要着色器中的确切值(例如,平滑度或金属度),请禁用此属性。默认情况下会启用此属性。

  • Filter Mode:纹理在3D变化拉伸时如何进行过滤

    • Point:纹理靠近时变为块状
    • Bilinear:纹理靠近时变得模糊
    • Trilinear:与Bilinear类似,但是纹理在不同的MIP级别之间模糊
  • Objects for Packing:关联需要打图集的图片们,注意:一定是Sprite类型的图片

  • Default

    • Max Texture Size:纹理的最大尺寸,像素为单位

    • Format:指定纹理的内部表示,在不同平台上会有不同的参数

    • Compression:纹理压缩类型

      • 不压缩
      • 低质量
      • 普通质量
      • 高质量
      • 质量越高占用内存越多,不压缩质量最好
    • Use Crunch Compression:使用Crunch压缩,是一种有损压缩格式,压缩耗时长,但是运行时解压速度快

    • Compressor Quality:压缩质量,质量越高纹理越大,耗时越长

  • Objects for Packing
    图集内的图片

代码控制Sprite Atlas

代码控制的主要是加载图集中的图片,而加载SpriteAtlas图集的图片内容要比非SpriteAtlas的图集方便的多

spriteAtlas.GetSprite()

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
using UnityEngine;
using UnityEngine.U2D;

public class Lesson14 : MonoBehaviour
{
void Start()
{
GameObject obj = new GameObject();
SpriteRenderer sr = obj.AddComponent<SpriteRenderer>();
//加载图集资源
SpriteAtlas spriteAtlas = Resources.Load<SpriteAtlas>("MyAtlas");
//加载图集资源中的某一张小图
sr.sprite = spriteAtlas.GetSprite("dead1");
}
}

观察DrawCall数量

观察Batches数量即可

image

快速批量打图集方法

  1. 先把要打图集的图片放在一个文件夹内
  2. Objects for Packing中先随便添加一张图用于占位
  3. 将文件夹拖到刚刚添加的用于占位的图上,替换它
  4. 最后选择Pack Preview直接完成打包

image