Unity2017新功能Sprite Atlas详解
Sprite Atlas(精灵图集)
Sprite Atlas 针对现有的图集打包系统Sprite Packer在性能和易用性上的不足,进行了全面改善。除此之外,相比Sprite Packer,Sprite Atlas将对精灵更多的控制权交还给用户。由用户来掌控图集的打包过程以及加载时机,更加利于对系统性能的控制。
Sprite Atlas的主要有以下三个功能:
1.创建、编辑图集以及设定图集参数
2.添加图集Variant(变种)
3.运行时访问图集
下面将通过具体案例来分别展示以上三个功能。
创建、编辑图集及参数设定
在Unity 2017.1中,SpriteAtlas是一种资源,可以像其它资源一样在Unity中创建,例如预制件、场景等。
可以在检视窗口中设定要打包的精灵及其参数,例如图集的打包方式、输出贴图的压缩格式等。如下图所示,SpriteAtlas就是一个创建好的图集。
P.S.这里可以支持多种类型,包括单个Sprite、Sliced Sprite、文件夹,以及这些类型的任意组合。
操作更加方便,对用户更友好。可以将文件夹,纹理或精灵分配给Sprite Atlas。可以将整个文件夹分配给Sprite Atlas资产,该文件夹中的所有纹理(包括子文件夹)都将被打包。不考虑相同纹理内的其他精灵。
此外,在检视窗口上还可以看到图集的一些参数设定,例如:打包时是否支持精灵旋转(Allow Rotation)、贴图的采样模式(Filter Mode)、压缩方式(Compression)等等。
在最下方的预览窗口中,可以查看图集的生成效果。这样就可以很清楚的知道图集的打包方式是否合理,是否存在大量被浪费的空间。
添加图集Variant(变种)
所谓Variant,就是指原有图集的一个变种。它会复制原有图集的贴图,并根据一个比例系数来调整复制贴图的大小。
这样的Variant通常用于为高分辨率和低分辨率的屏幕准备不同的图集。
因为如果只准备一套高分辨率的图集,在低分辨率的设备上占用内存过多。反之,如果只准备一套低分辨率图集,在高分辨率的设备上就会模糊。
通过Atlas Variant就可以很方便地解决该问题。如下图所示,SpriteAtlas 1.spriteatlas是新建的一个低清图集,在检视窗口中将Type设为Variant,Master Atlas设为SpriteAtlas。这里为了与原图进行更明显的对比,将Scale设为0.1, 点击Pack Preview。
运行时访问图集
Sprite Atlas作为一种资源开放给用户,支持在脚本中直接访问,还可以通过名字获取图集中的精灵。
这样做的好处是,让用户可以更加直接地随时编辑图集,而且不用去单独加载图集中的每个精灵。
下面是一段动态换装的代码,该脚本通过LoadAsset加载SpriteAtlas类型的资源,再通过SpriteAtlas的GetSprite接口获取图集中的精灵,最后将精灵传递给SpriteRenderer。相较于基于Sprite Packer的实现,整个过程要简单直接的多。
- using UnityEditor;
- using UnityEngine;
- using UnityEngine.U2D;
- public class SpriteAtlasExample : MonoBehaviour
- {
- void Start()
- {
- SpriteAtlas atlas = AssetDatabase.LoadAssetAtPath<SpriteAtlas>("Assets/SpriteAtlas/SpriteAtlas.spriteatlas");
- Sprite sprite = atlas.GetSprite("111");
- if(sprite != null)
- {
- GetComponent<SpriteRenderer>().sprite = sprite;
- }
- }
- }
创建方式
Assets>Create>Sprite Atlas
Unity2017新功能Sprite Atlas详解的更多相关文章
- 【原创】JDK 9-17新功能30分钟详解-语法篇-var
JDK 9-17新功能30分钟详解-语法篇-var 介绍 JDK 10 JDK 10新增了新的关键字--var,官方文档说作用是: Enhance the Java Language to exten ...
- Flex布局新旧混合写法详解(兼容微信)
原文链接:https://www.usblog.cc/blog/post/justzhl/Flex布局新旧混合写法详解(兼容微信) flex是个非常好用的属性,如果说有什么可以完全代替 float 和 ...
- Hadoop 新 MapReduce 框架 Yarn 详解
Hadoop 新 MapReduce 框架 Yarn 详解: http://www.ibm.com/developerworks/cn/opensource/os-cn-hadoop-yarn/ Ap ...
- Java 5 的新标准语法和用法详解集锦
Java 5 的新标准语法和用法详解集锦 Java 5 的新标准语法和用法详解集锦 (需要在首选项-java-complier-compiler compliance level中设置为java5.0 ...
- mysql数据库分区功能及实例详解
分区听起来怎么感觉是硬盘呀,对没错除了硬盘可以分区数据库现在也支持分区了,分区可以解决大数据量的处理问题,下面一起来看一个mysql数据库分区功能及实例详解 一,什么是数据库分区 前段时间写过一篇 ...
- Flex 布局新旧混合写法详解(兼容微信)
flex 是个非常好用的属性,如果说有什么可以完全代替 float 和 position ,那么肯定是非它莫属了(虽然现在还有很多不支持 flex 的浏览器).然而国内很多浏览器对 flex 的支持都 ...
- Delphi Format函数功能及用法详解
DELPHI中Format函数功能及用法详解 DELPHI中Format函数功能及用法详解function Format(const Format: string; const Args: array ...
- Sprite Atlas与Sprite Mask详解
https://www.sohu.com/a/169409304_280780 Unity 2017.1正式发布后,带来了一批能帮助大家更加简化工作流的新功能.今天这篇文章,将由Unity技术经理成亮 ...
- Linux的加密认证功能以及openssl详解
一.详细介绍加密.解密技术 现在的加密/解密技术主要有三种:对称加密,非对称加密,和单向加密 这三种加密解密技术的组合就是现在电子商务的基础,它们三个有各自最适合的领域,而且所要完成的功能也是不同的, ...
随机推荐
- HDU-1069.MonkeyandBanana(LIS)
本题大意:给出n个长方体,每种长方体不限量,让你求出如何摆放长方体使得最后得到的总高最大,摆设要求为,底层的长严格大于下层的长,底层的宽严格大于下层的宽. 本题思路:一开始没有啥思路...首先应该想到 ...
- Unity性能优化 – 脚本篇
https://wuzhiwei.net/unity_script_optimization/
- CentOS查看进程、杀死进程、启动进程等常用命令
关键字: linux 查进程.杀进程.起进程 1.查进程 ps命令查找与进程相关的PID号: ps a 显示现行终端机下的所有程序,包括其他用户的程序. ps -A 显示所有程 ...
- lendinghome oa 准备
hardcode版本 估计只能过一个吧 import java.util.*; public class NextServer { Map<Integer, Integer> server ...
- swift4.2 - 距离传感器
import UIKit class ViewController: UIViewController { deinit { NotificationCenter.default.removeObse ...
- Java01-Java基本概念及JDK安装
Java是由sun公司于1995年5月推出的Java程序设计语言和Java平台的总称. Java是一个完整的平台,不仅提供了优秀的编程语言,而且还提供了大量的可重用代码以及一个能提供安全性.可移植性. ...
- Head First Servlets & JSP 学习笔记 第二章 —— Web应用体系结构
Servlet没有main()方法,所以Servlet受其他人控制,这个其他人就是容器!而Tomcat就是一种容器. 容器向Servlet提供Http请求和Http响应:容器来调用Servlet的do ...
- go语言中net包tcp socket的使用
一.通过socket我们模拟请求网易 package main; import ( "net" "log" "io/ioutil" &quo ...
- webpack接上一篇
html-webpack-plugin 自动生成html文件 安装:npm install html-webpack-plugin --save-dev 使用 在webpack.config.js中引 ...
- Android开发之ListView设置隔行变色
public class HLCheckAdapter extends BaseAdapter { private List<HuoLiang> list; private Context ...