Unity图集Include In Build问题
前言
最近查找图集相关资料的时候看到了Unity论坛上的一篇帖子,其中Unity官方技术人员解释了“Include In Build”究竟有什么作用。
Include In Build
简而言之,如果勾选了,就意味着Sprite直接引用SpriteAtlas;如果不勾选,就意味着Sprite没有直接引用SpriteAtlas。
也就是说,我们可以理解为“Include In Build”就是是否存储sprite和图集的引用关系。
当勾选的时候,Unity保证了使用者在任何时候都无需关注图集(不确定图集会不会被打进底包,官方没有细说,应该需要去找Unity源码才行)。当在运行时使用sprite的时候,Unity会自动进行图集管理。使用者无需手动加载图集。
当取消勾选的时候,使用者就需要使用Late-binding(后绑定)来加载图集。
问题
如果勾选了Include In Build,图集又打了单独的AB包。那么只要当图集AB包加载到内存中后,无需进行后绑定,即可正常显示sprite。
但根据不加载图集AB包,图片就无法正常显示的现象来看,我们可以进行一波推断。
对于既勾选了Include In Build,又打了图集AB包的情况,Unity虽然记录了sprite和图集的引用关系,但应该不会对图集进行任何管理了。所以说不想进行后绑定,又想对图集进行热更新,可以尝试开启Include In Build,并保证图集的AB包加载到内存中。
之前也怀疑过是不是这个版本Unity的Bug,所以上述问题的最终原因还需要查看Unity源码才能知道(埋一个坑,以后再说)。
Late-binding
所谓后绑定,就是Unity在加载资源时,对于引用到的sprite,Unity由于不知道sprite和图集的引用关系,所以会发送一个请求加载这个sprite的事件。作为使用者需要接收这个事件(即SpriteAtlasManager.atlasRequested回调),然后把这个sprite的图集返回给Unity。这也就意味着,使用者需要自己加载图集。
具体实现好像还有很多坑,因为没有淌坑,所以这里就不多说了。
后记
这个学习记录实际上是由上一篇图集引用问题引出来的。总之,学就完事了。