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;
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。