EnhancedScroller
是一个加强版本的滚动区域组件,可以改善滚动条的性能并实现例如无限滚动的效果。
# 简单示例
创建一个滑动区域:
- 滑动区域需要 3 个部分:滑动区域、滚动条、Mask
列表内容都需要继承 EnhancedScrollerCellView
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
接口
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() | |
{ | |
// 需要在 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; | |
} | |
} |
# 效果展示
如上所示:当我滚动列表时,左侧列表也会随之变化,重复使用对象。
# 无限循环列表
勾选此选项可以开启无限循环模式,在这个模式下,可以无限滑列表。
# 跳转位置
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 自带的滚轮区域会卡顿,特别是在初始化时会造成峰值,使用此插件可以避免这种情况😄.