使用契机:
目前在做的是一个Merge类型的休闲游戏,就是类似于三消棋盘那种一格一格的,每个格子都可能会有不同的元素图案,类似比较典型的游戏《绯闻港口》
类似这种,每个格子里都是一张小图,而这些个小图的种类,根据游戏设定可以有好几百个,我们游戏目前是已经有了500+种东西,任意一种都可能出现在棋盘的某一个格子里。
那么问题来了,这些小图要不要打成传统图集呢?
不打: 那就不能进行渲染合批,理论上79的格子阵,就光绘制格子里东西就要至少63个drawcall,且每一个小drawcall就只绘制一张那么小的图,怎么想都不划算。
打: 问题在于小图的数量太多了,有500+,每个小图102102像素大小,打成1024大小的图集要打5张,这样即使可以让小图合批渲染,但是每次不管使用几张图,哪怕是只用了1张小图,也要加载出整个5张1024的大图集,也很亏,而且这么大的一张图集在一些带宽较差的手机上也吃不消。
所以经过大佬指点,就采取了 动态图集 方案:通俗的说,就是运行时再确认图集,运行时将当前场景上的小图”复制“到一张大图上,渲染时用这张大图来渲染,当场景内元素变化时,也根据策略变化这个大图,比如出现了一张新的图,原来图集里没有的,那就把他添加复制上去,反之可以减少下去,(这个根据策略调整,我这个项目就只加不减,当图集装不下了再清空重新生成)
代码
这么牛逼的东西我这种菜鸡是弄不出来的,肯定是从网上找现成的,上链接!
https://github.com/tkonexhh/DynamicAtlas
用的是这个github上大佬的demo,他说的也很清楚
使用方法也很简单,直接下载他这个demo到工程里,在你想要放在动态图集里的Image替换成他的组件DynamicImage,然后group选择