在游戏里面经常会有背包,好友,对话,这样的列表。当列表的内容多了,如果一打开界面就对所有内容进行实例化,会消耗大量的性能,且会造成UI上的卡顿。
于是便需要,在列表里面只实例化屏幕上可见的item。屏幕外的不需要进行实例化。
这里 https://github.com/textcube/infinitescroll 便是我们要找的内容 如图:
然而在在看源码的时候我们不难发现,这个开源的git仓库,是对移动到屏幕外面的item进行了destroy(见WordItem.cs),对移动到屏幕上的item使用NGUITools.AddChild进行创建加载(见WordManager.cs)。
一般来说,对于经常创建,销毁的对象,可以使用ObjectPool进行优化 https://github.com/UnityPatterns/ObjectPool
使用untiy专业版带的PorFiler截图如下:
引入ObjectPool优化前:
引入ObjectPool优化后:
可以看出Gpu和Memory都有所下降。
在很多情况下,ui界面是多列的。于是可以简单修改infinitescroll源码,在WordManager.cs中加入columns,rows进行控制,改动后截图如下:
改动后demo git地址: https://coding.net/u/fatlin/p/UiVirtual/git