Unity3D界面管理——无限列表(基于UGUI)

1.主要思路:

  1. 根据列表项的大小与可视框生成大于可视框一个数量的列表项
  2. 根据列表项距离可视框中间的距离进行上下切换(使用数据结构为链表)
  3. 根据滚动距离做累加,求得当前的索引值,并通过索引值获取对应数据对列表项赋值

 

验证:提供有边界和无边界两种虚拟列表

  1. 有边界的列表将会在临界值(0或者1000)无法向上一个索引值(0)或下一个索引值(1000)滚动
  2. 无边界的列表将会在临界值时进行循环滚动

列表:

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 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值