112-2024-07-21周总结

  1. 白图问题

1. 白图问题

这是一个历史悠久的问题,问题现象就是预制体引入了一张图片,这张图片在打包的时候会被打进图集,那如果在预制体加载的时候图集没有加载就会导致显示的是白图。

之前有几种解决方案,一种就是如果这图片不多且少,那就复制一张到静态图片中,这类图片会跟随预制体一起打进包。另外一种就是知道图片所在的图集后,手动在预制体之前进行加载(一般在加载场景的时候就加载了)

这一次出现白图的时候发现一个Warning,追究这个Warning的时候发现Unity是提供了这种情况的解决方案的。这个Warning内容是:

1
SpriteAtlasManager.atlasRequested wasn't listened to while AdventureCamp requested.

这里出现的情况就是预制体引入了一张图片,这张图片被打进了AdventureCamp图集中了,但是我没有注册SpriteAtlasManager.atlasRequested方法,所以图集加载失败。所以只要我们注册了SpriteAtlasManager.atlasRequested方法,在方法里面对需要的atlas进行加载,那么这种情况的白图问题就能彻底解决。

我们在注册SpriteAtlasManager.atlasRequested之后遇到了另外一个问题,Unity会缓存atlasRequested返回的图集,导致游戏层把图集释放之后,下次加载图集还是会白图,因为Unity缓存的那份已经被我们释放了,但是因为缓存的原因没有再一次调用atlasRequested回调。找了半天没找到释放缓存的接口,最后发现可以通过调用Resources.UnloadUnusedAssets()方法进行释放(但是我们测试发现其他图集都释放了,还有一张Item图集是个例外就是释放不了,不知道被哪里引用着了,这张图集我们回到了老办法进行了预加载并且设置为永不释放(- -||))