Unity3D:打包图集与动态加载图集的两种方法

Unity3D图集打包

开启图集打包功能
Edit->Project Settings->Editor->Sprite Packer
在这里插入图片描述

老打包方法

其中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
    在这里插入图片描述
  4. Window->2D->Sprite Packer

在这里插入图片描述
通过以上方法可将所有设置了相同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.运行,即可看到相应的图片被动态加载出来了。


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

  • 12
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值