UGUI的滚动列表ScrollRect一次性实例化多个子item时如何做优化来降低性能消耗

在功能开发中经常会遇到某些页面需要一次性实例化几十甚至上百个item的情况,如果真的根据当时的数据量把多个子item都实例化出来,内存占用会变得很大,而且UGUI对超出viewport区域的对象也会绘制,导致画面突然变得很卡。

这个时候就需要对实例化的步骤做些优化:

1.对象池的引入:

首先在滑动列表时始终展示出来的只有viewport区域内的item,对超出viewport区域的item是不予显示的。那么是否可以将超出viewport区域的item放入回收池中,当需要新的item时直接去回收池中查找,实现item的循环利用,这样也可以减少内存占用。同时由于content下始终只有相对固定的几个item之间循环复用,因此对于渲染压力也能够大大减轻。

//获取可用的item
ItemCell GetItem(int index)         //index代表获取到item后,该item当前需要显示的目标index
{
	//为什么这里不用GameObject,而用自定义的组件ItemCell?
	//解答:ItemCell是自定义的脚本,用于对item物体宽高、msg等进行刷新和显示控制,单纯的GameObject是无法达成这样的效果
	ItemCell item;   
	
	//获取item有两种方式——这个很重要:
	//第一种:在当前item列表中查找
	//当缓慢的上滑滚动条时,为了item频繁刷新导致的视觉疲劳,此时不应该直接去回收池中获取item,而应该先在当前显示的item列表中查询是否有可用的对象。
	//当然直接的刷新item列表是不可避免的,如从当前位置快速的滑动到某地,此时上一

猜你喜欢

转载自blog.csdn.net/m0_47975736/article/details/122127503