天天看点

Unity 编辑器ScrollView滚动卡顿优化

在使用 unity 开发游戏的时候,经常会需要用到数据配置,方式可能是csv、json等等。为了可以方便地查看修改数据,通常使用<code>scrollview</code>实现在 unity 编辑器里面以列表的形式查看数据。

当数据量大的时候,滚动视图会发现卡顿不断,测试代码如下:

鼠标拖动滚动条滚动的时候,可以明显发现滚动条卡顿延迟跟着鼠标动:

Unity 编辑器ScrollView滚动卡顿优化

优化的思路就是只绘制当前可视的区域,自 unity 5.6 开始已经提供<code>treeview</code>控件,自带支持大数据集,

详见https://docs.unity3d.com/560/documentation/scriptreference/imgui.controls.treeview.buildroot.html

如果还没使用 unity 5.6,那么可以参考它的实现方式。将layout自动布局方式改成给定矩形来绘制,这样方便知道每行的高度和总的内容高度,再根据滚动条的坐标来计算获取当前显示的起始行和结束行,只绘制需要显示的行内容。

代码修改如下:

再次鼠标拖动滚动条滚动的时候,可以明显发现滚动条流畅许多:

Unity 编辑器ScrollView滚动卡顿优化

因为不是绘制全部控件,那么当使用编辑框的时候,弹出的编辑控件不会跟随着滚动,如下所示:

Unity 编辑器ScrollView滚动卡顿优化

那么就当滚动的时候,结束当前正在编辑的项吧,修改<code>ondrawlistview2</code>函数:

如果还是想使用自动布局方式来绘制项的话,那么可以使用<code>guilayout.space</code>来占用不需要绘制的区域。

继续阅读