文章目录

前言

一、打包图集步骤

1.导入2D Sprite包

2.开启图集打包的功能

3.创建Sprite Atlas文件

4.添加要打包的图片或者文件夹

二、图集的使用

三、关于SpritePacker的Mode介绍

四、Sprite Altas基本属性

1.Type

2.Master(主图集)

3.Variant(变体)

4.Texture

5.Objects for Pakcing

6.Pack Preview按钮

重点说明

注意事项


前言

在Unity中,通常渲染一个纹理会调用一次DrawCall。一个2D项目,可能包含大量的纹理,如果绘制每个纹理都调用一次DrawCall,这会占用过多的资源,从而影响整个应用程序的性能。为了降低性能消耗,我们可以使用精灵图集(Sprite Atlas)技术,它能够将多个纹理(texture)合并成一个大纹理,当访问图集中的多个纹理时,也只需要调用一次DrawCall 。

Unity2020之后的版本,弃用了旧版的SpritePacker,图片设置中的Packing Tag变灰,无法修改。需要使用新版的Sprite Atlas进行图集打包。

一、打包图集步骤

1.导入2D Sprite包

选择Window->Package Manager,选中Unity Registry,然后找到2D Sprite,将其导入到项目中。

2.开启图集打包的功能

选择Edit -> Project Settings -> Editor,将SpritePacker的Mode切换为你所需要的模式。我这里选择了Sprite Atlas V1 - Always Enabled。

3.创建Sprite Atlas文件

在Project视图点击鼠标右键,Create->2D->Sprite Atlas。

4.添加要打包的图片或者文件夹

将要打包的图片或文件夹,放置到图集文件的Objects for Packing中。然后单击PackPreview按钮,可以看到图集预览。

二、图集的使用

  • 直接在场景中使用原图片

  • 通过GetSprite方法获取图片
using UnityEngine;
using UnityEngine.U2D;
using UnityEngine.UI;public class UIPanel : MonoBehaviour
{public SpriteAtlas atlas;public Image img;private void Start(){img.sprite = atlas.GetSprite("Rank");}
}

三、关于SpritePacker的Mode介绍

  • Disabled

禁用图集相关功能。

  • Sprite Atlas V1 - Enabled For Builds

仅当发布(Build)的时候构建图集,在Editor和Play模式中引用原始纹理而非图集中的纹理。

  • Sprite Atlas V1 - Always Enabled

在运行时(Build和Play模式)引用图集中的纹理,在Editor模式中引用原始纹理。

  • Sprite Atlas V2 (Experimental) - Enabled :

Unity2020.3版本这个功能还处于实验中,默认在运行时引用图集中的纹理。

Sprite Atlas V1 不支持缓存服务器(Cache Server),Unity只能将打包的图集数据存储在Library/AtlasCache文件夹中,并且也不能有依赖项,不支持命名对象导入器(named objects importer),而Sprite Atlas V2提供了对上述功能的支持。具体可以参考Unity Manual:Sprite Atlas version 2 (Experimental)

四、Sprite Altas基本属性

1.Type

设置精灵图集的类型,默认为Master(主图集),也可以设置为Variant(变体图集)。

2.Master(主图集)

  • Include in Build

是否在运行时使用到图集中的Sprite时自动将图集加载到内存中。

Unity在打包的项目中会包含图集,并且在运行时自动加载它们,取消勾选图集的Include in Build选项可以禁用此行为。

        如果禁用Include in Build,Unity仍会将图集打包到项目Assets文件夹中的** .spriteatlas * 文件中,只是运行的时候不会加载到内存中。因此,当精灵引用已禁用的图集中的纹理,由于引用纹理不可用或未加载(not available or loaded),该纹理将无法被找到,引用它的图片将显示为空白。此时要加载精灵图集,必须使用脚本通过后期绑定(Late Binding)执行此操作。代码如下:

using UnityEngine;
using UnityEngine.U2D; //引用SpriteAtlas的命名空间!
public class SpriteAtlasTest : MonoBehaviour
{//如果勾选了Include Build属性,在启动游戏时自动进行以下操作//SpriteAtlasManager是在运行期间管理SpriteAtlas的一个类,它包含atlasRequested和atlasRegisterer两个事件//atlasRequested事件:当一个Sprite打包进了图集,但是在运行期间无法找到该图集的位置时触发。//atlasRegistered事件:SpriteAtlas加载完成后调用private void OnEnable(){SpriteAtlasManager.atlasRegistered += AtlasRegistered;SpriteAtlasManager.atlasRequested += AtlasRequest;}private void OnDisable(){SpriteAtlasManager.atlasRegistered -= AtlasRegistered;SpriteAtlasManager.atlasRequested -= AtlasRequest;}private void AtlasRegistered(SpriteAtlas spriteAtlas){Debug.LogFormat("Registered {0}.", spriteAtlas.name);Sprite sprite = spriteAtlas.GetSprite("AnimPic_0");Debug.Log("从图集中获取到的Sprite:" + sprite.name);}private void AtlasRequest(string tag, Action<SpriteAtlas> callback){var sa = Resources.Load<SpriteAtlas>(tag);callback(sa);}
}
  • Allow Rotation

运行打包的时候旋转精灵Sprite,这样可以最大限度的提供图集中Sprite的密度。

此选项默认为勾选状态,如果是画布中的UI元素则推荐关闭该选项,因为在图集中旋转了的Sprite在场景中也会旋转。

  • Tight Packing

        根据Sprite的轮廓而非Sprite外部矩形的轮廓来打包。这样可以提高图集中Sprite的密度。

勾选后使用精度更高的裁剪图集图片(Mesh裁剪),否则是矩阵裁剪(图片是一块矩形图)。

如果不需要高精度裁剪则取消勾选,如果发现裁剪出的图片显示不正确,则勾选。

  • Padding

        定义图集中Sprite之间的像素间距,防止Sprite之间出现重叠,默认值为4。

3.Variant(变体)

  • Master Atlas

设置主图集内容的副本作为自己的内容。

  • Include in Build
  • Scale

设置变体图集的缩放因子,介入0.1~1之间。

4.Texture

  • Read/Write Enabled

是否运行通过脚本函数访问纹理数据,例如Texture2D.SetPixels函数。如果启用,Unity会创建纹理副本,这将导致所需内存翻倍,并且只适用于未压缩纹理或DXT纹理。

  • Generate Mip Maps

是否生成MipMap。

  • sRGB

是否将纹理存储在伽马(Gamma)空间中。

  • Filter Mode

设置图集中纹理的滤波模式。

  • Show Platform Settings For

5.Objects for Pakcing

添加Sprite,将列表中的所有Sprite打包到图集中。可放入Texture2D、Sprite、文件夹。放入文件夹时会将文件夹下的所有Texture2D、Sprite放入图集。

6.Pack Preview按钮

点击后会在预览界面显示出图集的具体数值,如图集的内部表现、空间大小、尺寸、使用的压缩格式。

注意:在Sprite Atlas V2中,如果对图集有修改,要点击该按钮保存更改。

重点说明

变体图集的主要目的是创建与主图集不同分辨率的图集。主图集中Sprite的分辨力*Scale(缩放因子)得到的结果就是变体图集中Sprite的分辨率,它自身不包含Objects for Packing属性,因此变体图集中的内容都是主图集的副本。

当项目中既有主图集,又有该主图集的变体图集时,可以使用这两个图集中任意一个的Sprite。如果要自动从变体图集而不是主图集中加载Sprite,那就仅为变体图集启用Include in Build选项,并关闭主图集的这个选项。

注意事项

当图集中有一个Sprite处于活跃状态时,Unity会加载该Sprite所属图集中的所有纹理。如果一个图集中有许多纹理,而场景中只有一个纹理被引用,那么整个图集都会被加载,会造成较大的内存消耗。

解决该问题的方法:(可能会造成DrawCall增加)

  • 将场景中激活的所有或大多是纹理都打包到同一个图集;
  • 根据纹理的常见用途将其分别打包成多个较小的图集。

【Unity组件知识】如何在Unity2020以后版本中打包图集相关推荐

  1. html表单居中_如何在IE低版本中兼容HTML5表单属性placeholder属性

    WEB开发数据提交是必不可少的,为了更友好的用户体验,通常需要给输入框一个默认的提示信息.HTML5技术提供了一个表单属性placeholder专门用于输入框默认提示,但是在IE低版本中根本不兼容. ...

  2. 游戏开发unity杂项知识系列:untiy2019.4版本Sprite Mode选项Paking Tag不见了

    在使用untiy2019.4版本时,发现原来用的Packing Tag选项消失了 packing tag如何使用 官网有介绍 https://docs.unity3d.com/cn/2019.4/Ma ...

  3. [常用知识]如何在Eclipse、myEclipse中分别配置Tomcat和JBoss应用服务器

    最近一段时间,有几个朋友对Eclipse和myEclipse两个集成开发环境如何配置Tomcat.JBoss应用服务器有些不解.特此,我在这里总结相关配置方法,供大家做参考.有什么问题,可以留言,也可 ...

  4. Unity基础知识汇总

    2.Unity相关知识 2.1 Unity介绍 Unity成为一款可以轻松创建游戏和三维互动的开发工具,是一个专业跨平台游戏引擎 Unity操作快捷键 Ctrl N New Scene 新建场景 Ct ...

  5. Unity编辑器知识

    Unity编辑器知识 一.新建项目 二.界面布局 1)工具栏 2)菜单栏 三.视图 1)Project视图 2)Hierarchy视图 3)Inspector视图 4)Scene视图 5)Game视图 ...

  6. 游戏开发unity基础知识系列:(一)unity 2019 下载与安装

    游戏开发unity基础知识系列:(一)unity 2019 下载与安装 声明:未经作者允许,严禁商用,转载请标明出处和来源,谢谢 零.前言 本人在unity2d方面使用较多,关于unity的使用后面预 ...

  7. unity组件LineRenderer

    这是一个好玩的组件 主要作用划线,像水果忍者中的刀光,还有一些涂鸦的小游戏,包括让鼠标划线然后让对象进行跟踪导航也可通过此插件完成 附注:unity版本建议使用稳定一些的版本,有些api可能已经发生变 ...

  8. Unity基础知识学习五,UGUI优化相关

    1.什么是UGUI优化,UGUI优化的理论基础 1.1理论基础 Canvas, 是Unity渲染系统给层状几何体( layered geometry  )提供的可以被画入.被放在上面或者放在世界空间的 ...

  9. java 画笔跟swing组件_Java学习教程(基础)--Java版本历史(二)

    Java语言自JDK1.0版本以来经历了许多次更新,也在基本程序库中增加了大量的类别和包.从J2SE 1.4开始,Java语言的变动由 Java Community Process(JCP)管理,JC ...

最新文章

  1. 【BZOJ】1105: [POI2007]石头花园SKA
  2. LAMP麻辣网站的搭建
  3. 一篇深入剖析PCA的好文
  4. 情感分析的现代方法(包含word2vec Doc2Vec)
  5. [转]Angular 单元测试讲解
  6. 在unity 中,使用http请求,下载文件到可读可写路径
  7. [学习记录] macOS下的Nginx安装 Nginx基本知识
  8. 【ES11(2020)】可选链操作符和空值合并运算符
  9. if-else嵌套太深?教你一个新手都能掌握的设计模式搞定!
  10. 使用Dapper处理多个结果集和多重映射的教程
  11. /usr/bin/ld: cannot find -lstdc++ -lz问题
  12. idea快速生成SpringBoot项目无法启动问题
  13. (转)等保二级三级差异纵向对比表
  14. Java性能优化全攻略
  15. java身份证号码验证
  16. 命令行工具下载b站视频
  17. redisTemplate乱码问题
  18. 2020年国家政策高频密集出台,电子合同万业普及
  19. 基于嵌入式Win CE系统的电能质量监测仪
  20. matlab amesim联合仿真,AMESim与MATLAB_Simulink联合仿真接口配置

热门文章

  1. 渐开线齿轮齿形误差和齿向误差
  2. 酷狗音乐快速转换MP3格式的方法
  3. 尚硅谷Java基础学习--常用类部分例题解答(仅使用String类方法)
  4. 南开大学 软件学院 计算机网络 2021秋季 复习
  5. 支持Linux系统的加密狗
  6. 18 PyAutoGUI 屏幕截图(1)
  7. C++开发网络版斗地主游戏,附完整源码
  8. dropwizard常用属性注解
  9. Python中的自定义模块
  10. 几何、函数等的画图和注释