NGUI------UIWrapContent无限循环

本文主要探讨了如何使用NGUI的UIWrapContent脚本实现游戏中的UI无限循环功能,以优化性能并提升玩家体验。在游戏排行榜、邮件和国家成员等需要大量显示数据的场景中,通过固定数量的UI元素模拟所有数据,避免因创建过多Gameobj导致的性能消耗和卡顿问题。
摘要由CSDN通过智能技术生成

之前做项目就想写一篇关于UI无限循环的总结,但一直没写过,一是自己也没理解清楚,二是项目忙,也没时间。现在由于在等待新项目的启动,终于有时间去总结一下UI方面的相关知识。

无限循环:主要应用在游戏排行榜,邮件,国家成员等需要大量创建Gameobj的场景,因为如果每多一条数据,就创建一个Gameobj去显示的话,那么游戏当中会存在大量的Obj,消耗性能,造成卡帧的现象,影响玩家游戏体验。这时候,就需要无限循环的功能了,因为游戏视窗大小是固定的,只显示一定数量的UI,这样,就可以用一定数量的UI去模拟所有数据的显示。

UIWrapContent就是NGUI封装好,用来实现这套功能的脚本。

接下来,就来详解这个脚本。

protected virtual void Start ()
{
	SortBasedOnScrollMovement();
	WrapContent();    //核心函数
	if (mScroll != null) mScroll.GetComponent<UIPanel>().onClipMove = OnMove;    //由UIPanel的驱动,来更新对应的数据
	mFirstTime = false;
}

public void SortBasedOnScrollMovement ()    //这段函数主要用来将他的子物体排序,代替了UIGrid的功能
{
	if (!CacheScrollView()) return;

	// Cache all children and place them in order
	mChildren.Clear();
	for (int i = 0; i < mTrans.childCount; ++i)
		mChildren.Add(mTrans.GetChild(i));

	// Sort the list of children so that they are in order
	if (mHorizontal) mChildren.Sort(UIGrid.SortHorizontal);
	else mChildren.Sort(UIGrid.SortVertical);
	ResetChildPositions();
}

//上图对wrapcontent的实现,大致画了一下,以便于理解
public void WrapContent ()    //这个函数,是核心函数,用来实现无限循环的功能
{
	float extents = itemSize * mChildren.Count * 0.5f; //计算所有的UI距离,并分为一半(后面用来判断用)
	Vector3[] corners = mPanel.worldCorners;
		
	for (int i = 0; i < 4; ++i)        //将panel的世界坐标转化为本地坐标(具体哪些点,可以参考上图)
	{
		Vector3 v = corners[i];
		v = mTrans.InverseTr
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值