好物推荐EnhancedScroller的使用
fasty
EnhancedScroller是一个加强版本的滚动区域组件,可以改善滚动条的性能并实现例如无限滚动的效果。
简单示例
创建一个滑动区域:


可以使用Rect Mask 2D 替代Mask获得更好效果
列表内容都需要继承EnhancedScrollerCellView
PersonItem1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| public class PersonItem: EnhancedScrollerCellView { private TextMeshProUGUI _text; private PersonModel _model;
private Button _button;
private void Awake() { _text = GetComponentInChildren<TextMeshProUGUI>(); _button = GetComponent<Button>(); }
public void SetData(PersonModel model) { _model = model;
_text.text = _model.Name; } }
|
列表需要实现IEnhancedScrollerDelegate接口
PersonList1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
| public class PersonList : MonoBehaviour,IEnhancedScrollerDelegate { private EnhancedScroller _enhancedScroller;
private List<PersonModel> _list = new List<PersonModel>(); public EnhancedScrollerCellView cellViewPrefab;
private void Awake() { _enhancedScroller = GetComponent<EnhancedScroller>(); }
private void Start() { _enhancedScroller.Delegate = this; for (int i = 0; i < 30; i++) { _list.Add(new PersonModel(){Name = "AAA"+i}); } _enhancedScroller.ReloadData(); }
public int GetNumberOfCells(EnhancedScroller scroller) { return _list.Count; }
public float GetCellViewSize(EnhancedScroller scroller, int dataIndex) { return 30; }
public EnhancedScrollerCellView GetCellView(EnhancedScroller scroller, int dataIndex, int cellIndex) { var cellView = scroller.GetCellView(cellViewPrefab) as PersonItem; cellView.name = "cell " + dataIndex; cellView.SetData(_list[dataIndex]); return cellView; } }
|
效果展示

如上所示:当我滚动列表时,左侧列表也会随之变化,重复使用对象。
无限循环列表

勾选此选项可以开启无限循环模式,在这个模式下,可以无限滑列表。

无限循环列表效果
跳转位置

1 2 3 4 5
| if (int.TryParse(keyTex.text, out var data)) { data = Mathf.Clamp(data, 0, _list.Count); _enhancedScroller.JumpToDataIndex(data, tweenTime: 0.5f, tweenType: EnhancedScroller.TweenType.easeInSine); }
|
说明
除此之外,插件还支持例如:下拉加载、多种类子项、Gird布局等。。。
在使用几百个下拉项时,Unity自带的滚轮区域会卡顿,特别是在初始化时会造成峰值,使用此插件可以避免这种情况😄.