1.主要思路:
- 根据列表项的大小与可视框生成大于可视框一个数量的列表项
- 根据列表项距离可视框中间的距离进行上下切换(使用数据结构为链表)
- 根据滚动距离做累加,求得当前的索引值,并通过索引值获取对应数据对列表项赋值
验证:提供有边界和无边界两种虚拟列表
- 有边界的列表将会在临界值(0或者1000)无法向上一个索引值(0)或下一个索引值(1000)滚动
- 无边界的列表将会在临界值时进行循环滚动
列表:
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
/// <summary>
/// 虚拟列表
/// </summary>
public class VirtualList : MonoBehaviour, IScrollHandler
{
/// <summary>
/// 元件尺寸
/// </summary>
public Vector2 ItemSize;
/// <summary>
/// 放置内容
/// </summary>
public RectTransform Content;
/// <summary>
/// 列表项缓存
/// </summary>
private LinkedList<VirtualListItem> virtualListItems;
public List<VirtualListItemData> DataList = new List<VirtualListItemData>();
/// <summary>
/// 列表单元预制体
/// </summary>
[SerializeField]
private GameObject ListItemPrefab;
/// <summary>
/// 当前的中心二维坐标
/// </summary>
private Vector2 curCenterPos;
/// <summary>
/// 初始的中心二维坐标
/// </summary>
private Vector2 originCenterPos;
/// <summary>
/// 行数
/// </summary>
private uint