Unity3D图集打包
开启图集打包功能Edit->Project Settings->Editor->Sprite Packer
老打包方法
其中Enabled For Builds(Legacy Sprite Packer)和Always Enabled(Legacy Sprite Packer)可开启老打包图集,前者是在打成相应平台包的时候打图集,后者是可在Editor运行的时候打图集。
- 设置好图集打包模式后:Enabled For Builds(Legacy Sprite Packer)或Always Enabled(Legacy Sprite Packer)
- 确认所有的图片必须是Sprite(2D and UI)的纹理格式
- 给需要打成一个图集的Sprite设置相同的Packing Tag
Window->2D->Sprite Packer
通过以上方法可将所有设置了相同Packing Tag的图片打包到一个图集上去
扩展问题:
1.如何快速的设置PackingTag,或者说按文件夹名来设置文件夹中的所有图片的Packing Tag?
新打包方法
- 设置好图集打包模式后:Enabled For Builds或Always Enabled
- 在Project视窗
- 创建好Sprite Atlas后,命名为Atlas01
- 在Objects for Packing中选择,可以选择类型有Sprite、Texture或Folder
- 点击Pack Preview后,可在下方看到相应打包好的图集
加载图集
老图集加载处理
- 因为老图集虽然做了优化,但是不方便使用,这里我们采用Prefab的方法进行管理图集资源。
- 在Resources目录下创建一个空的Prefab,名字自取(最好与图集名相同,便于管理)
- 创建一个AssetList脚本,挂在创建的Prefab上
using UnityEngine;
public class AssetList: MonoBehaviour
{
public Object[] list;
}
- 编辑Prefab上的AssetList脚本,设置Size大小,同时将图片Obj拖入,编辑好后保存。(此处有个小坑:拖图片Obj的要确认是Sprite类型的,否则后面加载不出来)
- 还是使用Resources动态加载,创建脚本OldSpriteAtlas,并挂在带有Image组件的物件上
using UnityEngine;
using UnityEngine.UI;
public class OldSpriteAtlas : MonoBehaviour
{
private Image img;
// Start is called before the first frame update
void Start()
{
img = this.GetComponent<Image>();
GameObject assetGo = Resources.Load<GameObject>("Animal01");
AssetList assetList = assetGo.GetComponent<AssetList>();
Sprite firstSprite = assetList.list[0] as Sprite;
if (firstSprite != null)
{
img.sprite = firstSprite;
}
}
}
- 运行,即可看到相应的图片被动态加载出来了。
扩展:是否能否通过图集名来访问prefab中图集的索引,更利于使用?
新图集加载处理
- 将上面Atlas01放入Resources文件夹中,采用Resources来进行动态加载
- 创建脚本NewSpriteAtlas,并挂在带有Image组件的物件上
using UnityEngine;
using UnityEngine.U2D; //注意引入此命名空间
using UnityEngine.UI;
public class NewSpriteAtlas : MonoBehaviour
{
private Image img;
void Start()
{
img = this.GetComponent<Image>();
SpriteAtlas atlas01 = Resources.Load<SpriteAtlas>("Atlas01");
if(atlas01!=null)
{
img.sprite = atlas01.GetSprite("Img2");
}
}
}
3.运行,即可看到相应的图片被动态加载出来了。
还在持续完善…如有错误,还请指正。