Unity图集Include In Build问题

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。这也就意味着,使用者需要自己加载图集。

具体实现好像还有很多坑,因为没有淌坑,所以这里就不多说了。


后记

这个学习记录实际上是由上一篇图集引用问题引出来的。总之,学就完事了。


上一篇:Vue项目中如何优雅的使用icon


下一篇:Vue使用svt-sprite-loader自动引入svg图标 [自己遇到的问题解决]