NGUI------UIWrapContent无限循环
之前做项目就想写一篇关于UI无限循环的总结,但一直没写过,一是自己也没理解清楚,二是项目忙,也没时间。现在由于在等待新项目的启动,终于有时间去总结一下UI方面的相关知识。
无限循环:主要应用在游戏排行榜,邮件,国家成员等需要大量创建Gameobj的场景,因为如果每多一条数据,就创建一个Gameobj去显示的话,那么游戏当中会存在大量的Obj,消耗性能,造成卡帧的现象,影响玩家游戏体验。这时候,就需要无限循环的功能了,因为游戏视窗大小是固定的,只显示一定数量的UI,这样,就可以用一定数量的UI去模拟所有数据的显示。
UIWrapContent就是NGUI封装好,用来实现这套功能的脚本。
接下来,就来详解这个脚本。
protected virtual void Start ()
{SortBasedOnScrollMovement();WrapContent(); //核心函数if (mScroll != null) mScroll.GetComponent().onClipMove = OnMove; //由UIPanel的驱动,来更新对应的数据mFirstTime = false;
}
public void SortBasedOnScrollMovement () //这段函数主要用来将他的子物体排序,代替了UIGrid的功能
{if (!CacheScrollView()) return;// Cache all children and place them in ordermChildren.Clear();for (int i = 0; i < mTrans.childCount; ++i)mChildren.Add(mTrans.GetChild(i));// Sort the list of children so that they are in orderif (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.InverseTransformPoint(v);
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
