图片
前言 本文介绍一个UGUI关于ScrollRect的一个拓展插件:SuperScrollView。做项目的过程中,ScrollRect组件 的使用频率还是挺高的,尤其是在做类似背包这种需要大量子对象的时候。正常情况下,使用ScrollRect做滑动功能时,如果子对象非常多,在生成时难免会卡顿。所以就需要一个循环列表,类似对象池的功能,只会加载显示页面中所需要的,而不是一次性全部加载完成。 【Unity 实用工具篇】 | UGUI 循环列表 SuperScrollView,快速上手使用 一、UGUI ScrollRect拓展插件:SuperScrollView 1.1 介绍UGUI SuperScrollView基于UGUI ScrollRect提供了易于定制的ScrollView。它是一组C#脚本,可以帮助您创建所需的ScrollView。这是非常强大的和高度优化的性能。
在SuperScrollView中主要有三个组件,并实现了三种不一样的循环列表形式:
LoopListView2:适用于 横向/纵向 简单排列的列表视图,类似 Vertical Layout Group / Horizontal Layout Group的使用。LoopGridView:适用于网格排列,大小相同的列表视图,类似 GridLayout Group 的使用。LoopStaggeredGridView:适用于网格排列,但大小不相同的列表视图,可以实现列表中错列排序等特殊需求。下面就来介绍一下这三种循环列表的使用方式,快速上手及使用。
1.2 效果展示图片
图片
1.3 使用说明及下载Unity Asset Store下载地址:https://assetstore.unity.com/packages/tools/gui/ugui-super-scrollview-86572 CSDN下载地址:SuperScrollView 白嫖地址:VX搜我名字,回复【素材资源】
使用插件的方式有多种:
将下载好的SuperScrollView资源文件直接放到我们的项目Assets文件夹下即可。可以通过Unity中的 Window -> Package Manager 中导入,选择添加下载好的插件,或者使用URL直接添加都可以。 二、SuperScrollView 快速上手使用三种功能的组件在使用时差别不大,只不过各个组件有自己独有的几个参数可以选择,包括添加子对象,初始生成子对象的数量,设置间距、偏移量和排列类型等。
图片
功能比较简单,可配置的参数与Unity常规的布局组件类似,使用起来很容易上手。在演示之前先做一个不使用循环列表时的普通示例,在ScrollView下加载1000个对象。
简单搭建一个场景,在ScrollView中添加一个item作为生成的对象。
图片
Content上面需要挂载对应的布局组件,这里演示挂载一个垂直布局组件。
图片
Item对象上面挂载一个测试脚本TestItem.cs
using UnityEngine; using UnityEngine.UI; public class TestItem : MonoBehaviour { public Image ImgIcon; public Text TxtName; public void SetData(int _index) { TxtName.text = $"测试:<color=#F55F55>{_index}</color>"; } }
测试生成1000个对象脚本如下:
using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class LoopViewDemo : MonoBehaviour { public Button button; public Transform testContent; public GameObject testItem; private void Awake() { button.onClick.AddListener(() => { StartTest(); }); } private void StartTest() { for (int i = 0; i < 1000; i++) { GameObject go = GameObject.Instantiate(testItem, testContent); var itemInfo = go.GetComponent<TestItem>(); itemInfo.SetData(i); } } }
图片
此时运行游戏,点击开始按钮,可以看到1000个对象全部被生成。
图片
在游戏中的表现会出现明显的卡顿现象,对象越多越是如此。而且后面的对象并不会显示到玩家可以操作的视图中,只有不断往下滑动时才会显示,一次性生成白白消耗了性能。
下面看下SuperScrollView的使方法及效果。
2.1 LoopListView2与前面普通示例一样正常创建一个ScrollView以及对应的item,接着在ScrollView上面挂载LoopListView2脚本,并在LoopListView2上面添加对应的item对象(需要循环生成的游戏对象)。
图片
item对象需要挂载LoopListViewItem2脚本,如有对应逻辑脚本也可挂载。
图片
这里有两个点需要注意 1.不需要在Content上面挂载对应的布局组件了,否则会出现错乱的效果。 2.ScrollView组件如果需要保留滑动条,则不能选择Auto Hide And Expand Viewport。
图片
使用LoopListView2的代码如下:
using SuperScrollView; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class LoopViewDemo : MonoBehaviour { public Button button; public LoopListView2 LoopListView; private void Awake() { button.onClick.AddListener(() => { StartTest(); }); //初始化循环列表 LoopListView.InitListView(0, refreshListInfo); } private void StartTest() { //刷新循环列表 LoopListView.SetListItemCount(1000, true); } private LoopListViewItem2 refreshListInfo(LoopListView2 loopListView, int index) { if (index < 0