unity打AB包,AssetBundle预制体与图集(三)

警告:
spriteatlasmanager.atlasrequested wasn’t listened to while

条件一:图片打图集里面去了
条件二:然后图集打成AB包了
条件三:UI预制体也打到AB包里面去了

步骤一:先加载了图集
步骤二:再加载UI预制体

结果一:发现UI预制体的Image没有图片/图片错乱/图片是一整张图集,并且发出上面的警告。

原因是UI预制体里面的UI的图片已经找不到他对应的图集了;

解决方案是根据官网提供的方法:

using UnityEngine;
using UnityEngine.U2D;

public class AtlasLoader : MonoBehaviour
{
    void OnEnable()
    {
        SpriteAtlasManager.atlasRequested += RequestAtlas;//设置好监听
    }

    void OnDisable()
    {
        SpriteAtlasManager.atlasRequested -= RequestAtlas;
    }

    void RequestAtlas(string tag, System.Action callback)
    {
        var sa = Resources.Load(tag);//加载你的图集资源
        callback(sa);//将图集返回
    }
}

我前面的二,有讲解怎么预加载图集。
可以先声明一个SpriteAtlas Sp ;
等你加载完之后,将加载的图集赋值给声明的Sp
然后注意,这个tag,他就是图集的名字。

还听不懂的话,就看下面的大白话。

原理就是,当一个UI被你加载出来的时候。
这个UI Image需要加载一个sprite到他上面显示,
此时他就会发送一个事件RequestAtlas(图集名,带参回调);
然后,你通过他给你的图集名,去找相应的图集,然后通过这个回调接口,还给他

我的案例参考
声明
unity打AB包,AssetBundle预制体与图集(三)_第1张图片
初始化我的图集
unity打AB包,AssetBundle预制体与图集(三)_第2张图片
通用的调用图集方法
unity打AB包,AssetBundle预制体与图集(三)_第3张图片

unity打AB包,AssetBundle预制体与图集(三)_第4张图片

你可能感兴趣的:(unity,游戏引擎)