Unity3D图集打包

开启图集打包功能
Edit->Project Settings->Editor->Sprite Packer

unity IOS打包怎么打出来的文件夹 unity打包设置_加载

老打包方法

其中Enabled For Builds(Legacy Sprite Packer)和Always Enabled(Legacy Sprite Packer)可开启老打包图集,前者是在打成相应平台包的时候打图集,后者是可在Editor运行的时候打图集。

  1. 设置好图集打包模式后:Enabled For Builds(Legacy Sprite Packer)或Always Enabled(Legacy Sprite Packer)
  2. 确认所有的图片必须是Sprite(2D and UI)的纹理格式
  3. 给需要打成一个图集的Sprite设置相同的Packing Tag

Window->2D->Sprite Packer

unity IOS打包怎么打出来的文件夹 unity打包设置_动态加载_02


通过以上方法可将所有设置了相同Packing Tag的图片打包到一个图集上去

扩展问题:
1.如何快速的设置PackingTag,或者说按文件夹名来设置文件夹中的所有图片的Packing Tag?

新打包方法
  1. 设置好图集打包模式后:Enabled For Builds或Always Enabled
  2. 在Project视窗
  3. 创建好Sprite Atlas后,命名为Atlas01
  4. 在Objects for Packing中选择,可以选择类型有Sprite、Texture或Folder
  5. 点击Pack Preview后,可在下方看到相应打包好的图集

加载图集

老图集加载处理
  1. 因为老图集虽然做了优化,但是不方便使用,这里我们采用Prefab的方法进行管理图集资源。
  2. 在Resources目录下创建一个空的Prefab,名字自取(最好与图集名相同,便于管理)
  3. 创建一个AssetList脚本,挂在创建的Prefab上
using UnityEngine;

public class AssetList: MonoBehaviour
{
    public Object[] list;
}
  1. 编辑Prefab上的AssetList脚本,设置Size大小,同时将图片Obj拖入,编辑好后保存。(此处有个小坑:拖图片Obj的要确认是Sprite类型的,否则后面加载不出来)
  2. 还是使用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;
        }
    }
}
  1. 运行,即可看到相应的图片被动态加载出来了。

扩展:是否能否通过图集名来访问prefab中图集的索引,更利于使用?

新图集加载处理
  1. 将上面Atlas01放入Resources文件夹中,采用Resources来进行动态加载
  2. 创建脚本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.运行,即可看到相应的图片被动态加载出来了。


还在持续完善…如有错误,还请指正。