Unity UGUI图片循环列表插件

效果展示:

下载链接:https://gf.bilibili.com/item/detail/1111843026

概述:

LoopListView2 是一个与 UGUI ScrollRect 相同的游戏对象的组件。它可以帮助 UGUI ScrollRect 以高效率和节省内存的方式支持任意数量的项目。

对于具有10,000个项目的ScrollRect, LoopListView2并不真正创建10,000个项目,而是根据视窗的大小创建几个项目。

例如,当ScrollRect向上移动时,LoopListView2组件将进行检查最上面的项目的位置,一旦最上面的项目离开视口,则LoopListView2组件将回收最上面的项,同时检查最下方的项目位置,一旦最下方的项目接近视口底部LoopListView2组件将调用onGetItemByIndex处理程序来创建一个新项和然后将新创建的项放置在最下面的项下,因此新创建的项变为新的最下面的项目。

每个项目可以使用不同的预制件,可以有不同的高度/宽度。

在该文件夹中有几个示例可以帮助您了解LoopListView2组件与路径:Assets -> SuperScrollView -> Demo ->场景。菜单场景是入口。

下图是toptobutton安排的滚动矩形的样子:

在上图中,scrollrect有10000个项目,但实际上,只有7个项目真正创建。

Inspector设置:

在Inspector中,为了确保LoopListView2组件工作良好,有几个需要设置的参数:

**ItemPrefabList:**这是要克隆的现有项。

每个项目可以使用不同的预制件,每个预制件可以有不同的默认填充滚动块中每个项目之间的间距)。而且,每个预制件都可以有不同的默认x本地位置(用于垂直scrollrect)或默认y本地位置(用于水平scrollrect),这里,称为(X/Y) pooffset。每个预制件都有一个回收InitCreateCount是开始时在池中创建的计数。

事实上,在运行时,每个项目可以有不同的填充和(X/Y) posofset,你可以改变一个item的padding和(X/Y)PosOffset在你的onGetItemByIndex回调中。你可以得到/设置它们LoopListViewItem2。填充和LoopListViewItem2。StartPosOffset。

重要提示:所有itemPrefab的localScale必须为(1,1,1)。

**SupportScrollbar:**如果选中,LoopListView2组件将支持滚动条。
ItemSnapEnable:

如果选中,LoopListView2组件将尝试将项捕捉到中的配置位置ViewPort。

ItemSnapPivot是项目的快速枢轴点的位置,定义为矩形本身大小的一小部分。0,0对应左下角而1,1对应右上角。

ViewPortSnapPivot是ScrollRect ViewPort的snap枢轴点的位置,定义为矩形本身大小的分数。0,0对应左下角,而1,1对应右上角。

**ArrangeType:**滚动方向,有四种类型:

(1) TopToBottom:这种类型用于垂直滚动,item0,item1,...itemN是在scrollrect视口中从上到下依次定位,就像下面:

(2) BottomToTop:这种类型用于垂直滚动条,item0,item1,...itemN是在scrollrect视口中从下到上依次定位,就像下面:

(3) LeftToRight:这种类型用于水平滚动,item0,item1,...itemN是在scrollrect视口中从左到右依次定位。

(4) righttolleft:该类型用于水平滚动,item0,item1,...itemN是在scrollrect视口中从右到左依次定位。

重要的公开方法:

cs 复制代码
public void InitListView(int itemTotalCount,
System. Func<LoopListView2, int, LoopListViewItem2> onGetItemByIndex,
LoopListViewInitParam initParam = nu1l)

InitListView方法用于初始化LoopListView2组件。有3个参数:

**itemTotalCount:**滚动视图中的项目总数。如果该参数设置为-1,则表示有无限项,不支持滚动条,ItemIndex可以从-MaxInt到+MaxInt。如果设置sssa value >=0,则ItemIndex只能来自0到itemTotalCount -1。

**onGetItemByIndex:**当一个项目进入scrollrect视图时,这个Action将被调用使用项目索引作为参数,以允许您创建项目并更新其内容。LoopListViewItem2是onGetItemByIndex的返回值,每个创建的项目都有一个自动附加的LoopListViewItem2组件:

LoopListViewItem2组件是一个非常简单的例子:

mItemIndex属性表示列表中项目的索引,如上所述,如果itemTotalCount设置为-1,则mItemIndex可以从-MaxInt到+MaxInt。如果将itemTotalCount设置为>=0,则mItemIndex只能在0到itemTotalCount之间取值1。

mItemId属性表示该项的id。此属性在创建项时设置从池中获取,并且在项目回收回池之前将不再更改。下面的代码是onGetItemByIndex的示例:

cs 复制代码
LoopListViewItem2 OnGetItemByIndex(LoopListView2 listView, int index)
{
if (index < 0 || index >= DataSourceMgr.Get.TotalItemCount)
{
return null;
}
//get the data to showing 
ItemData itemData = DataSourceMgr.Get.GetItemDataByIndex(index);
if(itemData == null)
{
return null;
}
/*get a new item. Every item can use a different prefab, the parameter of the 
NewListViewItem is 
the prefab'name. 
And all the prefabs should be listed in ItemPrefabList in LoopListView2 Inspector 
Setting */ 
LoopListViewItem2 item = listView.NewListViewItem("ItemPrefab1");
ListItem2 itemScript = item.GetComponent<ListItem2>();
// IsInitHandlerCalled is false means this item is new created but not fetched from pool. 
if (item.IsInitHandlerCalled == false)
{
item.IsInitHandlerCalled = true;
itemScript.Init();// here to init the item, such as add button click event listener.
}
//update the item's content for showing, such as image,text. 
itemScript.SetItemData(itemData,index);
return item;
}

此方法用于获取新项目,新项目是命名的预制件的克隆itemPrefabName。此方法通常在onGetItemByIndex中使用。

此方法可用于在运行时设置滚动视图的项目总数。如果此参数设置为-1,则表示有无限个项目,并且不支持滚动条ItemIndex取值范围从-MaxInt到+MaxInt。如果将该参数设置为>=0,则ItemIndex只能在0到itemTotalCount -1之间取值。

如果resetPos设置为false,则在此方法完成后滚动块的内容位置不会改变。

通过itemIndex获取可见项。如果项不可见,则此方法返回null。

所有可见项存储在List<LoopListViewItem2>中,命名为mItemList;这个方法是通过可见项列表中的索引获取可见项。参数索引为0 ~mItemList.Count。

获取所有可见项目的总数。

通过itemIndex更新项。如果itemIndex-th项不可见,则使用此方法什么都没有。否则,该方法将首先调用onGetItemByIndex(itemIndex)来获取一个更新项目,然后重新定位所有可见项目的位置。

此方法将更新所有可见项。

这个方法将滚动内容的位置移动到itemIndex-th item +的位置在当前版本中,itemIndex是从0到MaxInt, offset是从0到scrollrect视窗大小。

对于垂直滚动块,当一个可见项的高度在运行时发生变化时,这个方法应该调用LoopListView2组件来重新定位所有可见项的位置。

对于水平滚动块,当可见项的宽度在运行时发生变化时,则使用此方法来让LoopListView2组件重新定位所有可见项的位置。

快速移动将立即完成

使用viewport快照点获取最近的项目索引。

设置snap目标项索引。这个方法在PageViewDemo中使用。

清除当前的捕捉目标,然后LoopScrollView2将自动捕捉到CurSnapNearestItemIndex。

相关推荐
weixin_448065311 小时前
Unity学习笔记(三)如何实现角色移动、跳跃、冲刺
笔记·学习·unity
向宇it2 小时前
【从零开始入门unity游戏开发之——C#篇08】逻辑运算符、位运算符
开发语言·前端·vscode·unity·c#·游戏引擎
虾球xz4 小时前
游戏引擎学习第47天
学习·游戏引擎
虾球xz6 小时前
游戏引擎学习第48天
学习·游戏引擎
异次元的归来6 小时前
UE5的TRS矩阵
线性代数·矩阵·ue5·游戏引擎·unreal engine
UI设计前端1 天前
数字孪生项目解决虚幻引擎UE模型导入后差异很大的解决方法
大数据·前端·数学建模·游戏引擎·虚幻
weixin_448065311 天前
Unity学习笔记(二)如何制作角色动画
笔记·学习·unity
虾球xz1 天前
游戏引擎学习第46天
学习·游戏引擎
神码编程1 天前
【Unity功能集】TextureShop纹理工坊(一)功能集介绍
unity·游戏引擎·photoshop·shader