做了几个关于spriteatlas的实验,收获不少. 过程懒得写了.就把最后关键的两点列一下吧.
显存
当img被放入纹理集以后,无论原img是否在Resources
目录.显存中均使用的是纹理集而非原始图片.
比如游戏中有10个物品,背包展示时候 你通过Resource.Load<Sprite>($imgPath)
加载对应的图片进行展示. 但是该图片已经被打入纹理集了. 则此时显存中加载的是纹理集而非单张图片素材
如图,裸包19个纹理 打成纹理集后 无论如何折腾都是20个纹理.
APK包体
原始图片如果放入Resources
目录则会被全量打入APK(即使根本用不到☹️). 但是如果放在外部,只有纹理集放入Resources
目录则原素材只会打入很小一部分信息.
恩 这个是比较尴尬的地方了.
如果所有图片都是被间接引用的. 比如一个Prefab里面有一个节点挂了一个SpreiteRender然后引用了Pic1.jpg.
这时候只要把Img和纹理集都丢到Resource
目录外面即可. 打出包来 结构也会和方案2一样的.
但是 如果项目中存在 需要用路径去进行Resource.Lord<Sprite>($imgPath)
来访问资源时候. 原始资源如果不在Resource
目录就根本访问不到.
此时需要首先Load到纹理集,然后通过GetSprites
方法访问到相应纹理. 也就是自己需要维护一份纹理集和图片的从属关系.然后封装一下Load函数才行.