Unity 通过对象池实现滑动列表

您所在的位置:网站首页 unity滑动列表渐变 Unity 通过对象池实现滑动列表

Unity 通过对象池实现滑动列表

2023-11-06 09:19| 来源: 网络整理| 查看: 265

背包格子类

挂载在格子的预制体上,用于创建该格子时更新该物品的数量等信息

using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class BagItem : MonoBehaviour { public void InitItemInfo(Item info) { //更新道具数量 GetComponentInChildren().text = info.num.ToString(); } }

背包管理器

包含物品类,物品列表,以及创建演示数据的函数

using System.Collections.Generic; public class Item { public int id; public int num; } public class BagManager: Singleton { public List items = new List(); public void InitItemsInfo() { for(int i = 1; i = BagManager.Instance.items.Count) maxDisplayIndex = BagManager.Instance.items.Count; /*---------显示可见范围内的格子------*/ for (int i = minDisplayIndex;i < maxDisplayIndex; i++) { if (curDisplayItems.ContainsKey(i)) //已显示的格子,不再重复创建 continue; else { GameObject obj = PoolManager.Instance.getObject("BagItem", "Prefabs/UI/BagItem"); //未显示的格子,从池中获取 obj.transform.SetParent(content); obj.transform.localPosition = new Vector3(i % column * (itemSize+interval), i / column * (itemSize + interval) * (-1), 0); //将格子放到正确的位置上 obj.GetComponent().InitItemInfo(BagManager.Instance.items[i]); //初始化格子信息 curDisplayItems[i] = obj; //将当前显示的格子按照编号录入字典 } } /*----------移除不可见的格子---------*/ for(int i = lastMaxDisplayIndex;i > maxDisplayIndex;i--) { if (curDisplayItems.ContainsKey(i)) { PoolManager.Instance.recycleObject("BagItem", curDisplayItems[i]); curDisplayItems.Remove(i); } } for(int i = lastMinDisplayIndex;i { panelStack.Pop(); } ); GameManager.instance.NonMonoUpdateMethod = DisplayBagItem; //将DisplayBagItem函数注入GameManager的Update中,实现实时更新 } public override void OnExit() { panelManager.DestroyPanel(this.panelType); } public override void OnPause() { panelBindingTool.GetOrAddComponent().blocksRaycasts = false; } public override void OnResume() { panelBindingTool.GetOrAddComponent().blocksRaycasts = true; } }

效果



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3