unity打包图集作用:减少drawcall,提高性能;
Sprite Packer unity以前打包图集的方式,该功能在windows/sprite packer,如果功能不可用,打开目录edit/project setting/editor,更改sprite packer的mode,在下拉列表中 disabled不启用、enabled for builds(legacy sprite packer)打包时启用(针对sprite packer这种打包方式)、always enabled(legacy sprite packer)总是启用(针对sprite packer这种)、enabled for builds打包时启用(针对sprite Atlas这种打包方式)、always enabled(针对sprite Atlas)如图:
然后将你要打包的sprite的packing tag设为相同名字,如图:
在点击sprite packer面板左上角的pack即可打包成功。
关于sprite packer有三点说明一下:
1:在Resources文件夹下的sprite无法打包;
2:带alpha的sprite和不带alpha的sprite不会打包到同一图集;
3:sprite packer将逐渐被sprite Atlas替代;Sprite Atlas unity2017版本后增加的功能,在资源面板上,右击create–sprite Atlas即可创建出来。type为master的,图集的一些参数可以设置来影响图集的品质和大小。objects for packing 下点击+即可添加你想打包的sprite或者文件夹或者sprite和文件夹的混合形式。如图:
type为variant的,为原有图集的一个变种。它会复制原有图集的贴图,并根据一个比例系数(scale)来调整复制贴图的大小。这样的Variant通常用于为高分辨率和低分辨率的屏幕准备不同的图集如图:
另外可以用代码控制打包的图集中的sprite哦,并且还可以放在Resources文件夹下打包图集和访问,部分代码如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.U2D; //引用spriteAtlas类对应的类库
public class spriteAlatsController : MonoBehaviour {
SpriteAtlas myAtlas;
SpriteRenderer spriteTest;
// Use this for initialization
void Start ()
{
spriteTest = GameObject.Find("SpriteTest").GetComponent<SpriteRenderer>();
}
// Update is called once per frame
void Update ()
{
if (Input.GetKeyDown(KeyCode.A))
{
myAtlas =(SpriteAtlas)Resources.Load("firstSpriteAltas");
print(myAtlas);
//.GetSprite("name") 通过图集中某一sprite的名字得到对应的精灵;
Sprite changedSprite = myAtlas.GetSprite("backGround4");
//换装
spriteTest.sprite = changedSprite;
}
}
}
再来说说一个有趣实用的东东:sprite mask 精灵遮罩
把sprite拖入场景中,在sprite属性面板上的sprite renderer上有一个mask interaction就是配合遮罩使用的。
提供的sprite mask属性图片如下:
当mask interaction为visible inside mask时,表现如图:
当mask interaction为visible outside mask时,表现如图:
上述sprite mask会对场景中所有设置了mask interaction的sprite产生作用,那么如何有选择性控制呢,提供两种方案:
一:在sprite mask属性面板上添加sorting group ,然后把要产生遮罩作用的sprite放在sprite mask下(子物体),不是其子物体的不会被影响;
二:勾选mask属性上的custom range ,然后设置sorting layer和order in layer,配合sprite的sorting layer和order in layer设置就可(当sprite的order in layer值处在mask的front-order in layer和back-order in layer之间时可行);最后mask的alpha cutoff如果要起作用,那么sprite的alpha source应该选择from gray scale(灰度图),如图:
调整alpha cutoff大小的动态图献上: