UGUI ScrollRect 优化

UGUI ScrollRect 优化

在之前的文章中提过,ScrollRect 优化一般有两种方法,一种是采用 LayoutElement 占位符,这种方法的缺点在于需要频繁的变换父子关系,从而造成 Layout 需要不断的重构,如果元素数量比较大的情况下,就会消耗大量资源,造成帧率降低;另一种方法时基于位置变换实现,本次实现也是基于 UGUI 的 LayoutGroup 来实现。

实现

算法实现的核心包括越界检测和位置移动,为了保证滚动视图进行连续的滚动,至少要保证在可视区(View)之外有两个元素,此时,边界检测范围为可视区+上下各一个元素大小的区域,如下图所示。

在 ScrollRect 滑动过程中,因为需要频繁的进行越界检测和位置移动,所以这里采用双向链表来管理 UI 元素,通过维持链表的有序性(索引、位置),来提高元素遍历的效率。

最后

最后附上工程代码,这里只是提供一种 ScrollRect 实现的思路和简单示例,工程没有经过深度的测试,使用前请慎重考虑,后续会随着项目使用进行逐步完善。