unity实现无限列表功能
本文实例为大家分享了unity实现无限列表功能的具体代码,供大家参考,具体内容如下
publicstaticclassRectTransformExtensions { publicstaticboolOverlaps(thisRectTransforma,RectTransformb) { returna.WorldRect().Overlaps(b.WorldRect()); } publicstaticboolOverlaps(thisRectTransforma,RectTransformb,boolallowInverse) { returna.WorldRect().Overlaps(b.WorldRect(),allowInverse); } publicstaticRectWorldRect(thisRectTransformrectTransform) { Vector2sizeDelta=rectTransform.sizeDelta; floatrectTransformWidth=sizeDelta.x*rectTransform.lossyScale.x; floatrectTransformHeight=sizeDelta.y*rectTransform.lossyScale.y; Vector3position=rectTransform.position; returnnewRect( position.x-rectTransformWidth*rectTransform.pivot.x, position.y-rectTransformHeight*rectTransform.pivot.y, rectTransformWidth, rectTransformHeight); } ////// /// ////// 世界坐标的position /// publicstaticRectWorldRect2(thisRectTransformrectTransform,Vector3pos) { Rectrect=newRect(); Vector2sizeDelta=rectTransform.sizeDelta; floatrectTransformWidth=sizeDelta.x*rectTransform.lossyScale.x; floatrectTransformHeight=sizeDelta.y*rectTransform.lossyScale.y; Vector3position=pos; rect.x=position.x-rectTransformWidth*rectTransform.pivot.x; rect.y=position.y-rectTransformHeight*rectTransform.pivot.y; rect.width=rectTransformWidth; rect.height=rectTransformHeight; returnrect; } }
以上拓展方法是判断两个Recttransform类型的物体是否相交。
然后ScrollRec的滑动回调方法中更新UI位置,代码如下
privatevoidOnScrollRectValueChanged(Vector2arg0) { DictionaryinOverlaps=newDictionary (); mRectMask=遮罩物体的RectTransform.WorldRect(); //m_DynamicRectDic这个字典保存的是你所有UI需要放置的位置数据, //判断所有UI哪个是可见哪个不可见,保存起来 foreach(DynamicRectdRinm_DynamicRectDic.Values) { tmpTra.localPosition=dR.localPos; //获取每个位置UI的世界坐标Rect Rectrect=m_LevelItemPrefabRT.WorldRect2(tmpTra.position); if(rect.Overlaps(mRectMask)) { inOverlaps.Add(dR.Index,dR); } } //m_LevelItemList是保存你实例化后的UI列表,比如你这个遮罩页面最多显示3个UI,你需要实例化4个UI,然后动态修改gameobject的显示与隐藏 intlen=m_LevelItemList.Count; for(inti=0;i ///通过动态格子获得动态渲染器 /// /// /// privateLevelItemGetDynmicItem(DynamicRectrect) { intlen=m_LevelItemList.Count; for(inti=0;i ///获得待渲染的渲染器 /// /// privateLevelItemGetNullDynmicItem() { intlen=m_LevelItemList.Count; for(inti=0;i ///本地坐标 /// publicVector3localPos; /// ///格子索引 /// publicintIndex; publicDynamicRect(intindex,Vector3localPos) { this.Index=index; this.localPos=localPos; } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。