美文网首页Unity技术分享Unity跨平台技术分享
Unity ScrollView加速组件「Turbocharge

Unity ScrollView加速组件「Turbocharge

作者: Pieces_Jing | 来源:发表于2019-12-18 18:43 被阅读0次

    TurbochargedScrollList

    Version: 1.0

    简介

    我们在做UI时,会涉及到显示列表的展现,一个列表中可能会有很多的列表项。通常我们的解决方案,是使用UGUI的Scroll View,并且在Content上添加一个Layout Group组件来实现。但是UGUI并没有很好地优化列表项太多的问题,它的每一个列表项都是一个GameObject实体,存在于Hierarchy中,当我们的列表项过于复杂,或者过多时(假设1000个),程序将会卡顿的无法使用。

    TurbochargedScrollList是对UGUI ScrollView的一个强化。它在保证简单易上手的前提下,很好地解决了以上引用内容提到的问题。通过TurbochargedScrollList加强过后的ScrollView,可以显示任意多个列表项。

    TurbochargedScrollList能做什么

    1. 支持超大数据量的高效滚动列表(DEMO在晓龙660的安卓手机上,可以做到10000万个列表项快速滑动时稳定60FPS)
    2. 支持列表项大小不一致

    原理

    TurbochargedScrollList的核心原理是基于对象池技术,让ScrollView变成一个虚拟列表,仅渲染Viewport中可以看到的几个内容。当然TurbochargedScrollList的渲染算法是特别优化过的,可以最大化的减少CPU和GPU的开销。另外Turbocharged的列表可以支持不同Size的列表项,这对很多虚拟列表开发者来说,是一个头疼的难题。

    屏幕截图:

    垂直列表Demo 水平列表Demo 网格列表Demo

    使用方法(How To Use)

    实例化 Turbocharged Scroll List

    开发中,我们有两种方式来吧Scroll View包装成高效的Turbocharged Scroll List。在三个不同列表的Demo中,我演示了3种不同的方式来生成Turbocharged Scroll,下面我们就来一一描述

    We have 2 way can improve Scroll View to Turbocharged Scroll List。And there i show 3 different way to create Turbocharged Scroll.

    在垂直列表中,我们的列表项是来自于Assets中一个Prefab的引用,然后我在VerticalScrollListDemo中实例化了一个布局设置类,简单的设置了列表的「列表项间距」以及列表上方的空出间隔。接着我实例化了一个垂直列表类「Jing.TurbochargedScrollList.VerticalScrollList」,并传入了Scroll View对象,列表项,以及布局类。

    In VerticalScrollListDemo, i take the list item prefab from Assets

    在水平列表中,我们的列表项是来自于Hierarchy中的一个GameObject,它被当做列表项时,HorizontalScrollList自动将其Active设置为了false。后续步骤则和VerticalScrollListDemo中提到的一样。

    In HorizontalScrollListDemo, i take the list item prefab from Hierarchy

    在网格列表中,我们用了另一种方式来实例化Turbocharged Scroll List, 首先我们在Scroll View上添加了一个组件TurbochargedGridScrollList,并且直接配置了引用的列表项Prefab以及布局参数。代码中我们只需要拿到这个Component调用起GetList()方法,则可以获取到列表对象

    In GridScrollListDemo, i add TurbochargedGridScrollList Component on the Scroll View, and call the GetList() function to get list

    常用事件

    onRenderItem:该事件在每一个列表项被渲染时触发,三个参数分别是列表项GameObject上的组件,列表项对应的数据,以及一个bool值标记了该列表项是否是全新的,如果是false,则表示它是一个刚刚从active为false变为true的列表项,其对应的数据并没有改变,我们可以通过该bool值来优化我们的代码逻辑。

    onRenderItem: When the item show in list, this event called, and the isRefresh mark the item is have the different data(if false, we can jump the logic code)

    onRebuildContent: 每当列表总宽度或者高度改变时触发

    onRebuildContent: Called when the list content size change

    onRefresh: 每当列表滚动时触发

    onRefresh: Called when the list scroll

    项目地址

    https://github.com/jinglikeblue/TurbochargedScrollList

    相关文章

      网友评论

        本文标题:Unity ScrollView加速组件「Turbocharge

        本文链接:https://www.haomeiwen.com/subject/rqnunctx.html