1. 新版sprite要打包成图集,需要手动创建SpriteAtlas资源,然后选择需要打包进图集资源的Sprite目录或资源文件
参考:https://docs.unity3d.com/Manual/class-SpriteAtlas.html
2. 将图集打包成AssetBundle的时候,不要勾选图集的include in build 选项
![](https://img-blog.csdnimg.cn/20190407035411114.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3hfc3R1ZHlpbmc=,size_16,color_FFFFFF,t_70)
3. 由于Sprite所依赖的图片被打包进了图集,而图集又被打包进了AssetBundle,因此运行时Sprite显示为空白,此时可以使用Unity提供的延时绑定功能(Late Binding)
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<SpriteAtlas> callback)
{
var sa = Resources.Load<SpriteAtlas>(tag);
callback(sa);
}
}
(unity 2018.3.8f )已知问题:
问题1:一旦取消了图集的include in build选项,如果直接将此图集删除,再打包AssetBundle,则运行时SpriteAtlasManager.atlasRequested仍然会被调用。必须勾选include in build再删除图集。
问题2:Editor的Sprite Pack设置中,如果不选Aways Enabled,则在编辑器中运行时,用以上方法,Sprite显示为空白。但是在打包出来的应用程序中运行,则显示正常。
![](https://img-blog.csdnimg.cn/2019040712591717.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3hfc3R1ZHlpbmc=,size_16,color_FFFFFF,t_70)
![](https://img-blog.csdnimg.cn/20190407125941407.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3hfc3R1ZHlpbmc=,size_16,color_FFFFFF,t_70)
以下为windows app包显示的正常效果
![](https://img-blog.csdnimg.cn/20190407130202914.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3hfc3R1ZHlpbmc=,size_16,color_FFFFFF,t_70)