list for ngui(Unity)列表
2014-11-16 17:19
507 查看
最近做的东西,发现与数据相互的时候,需要用到大量的列表来展示给玩家看,但是ngui给出的列表例子是有多少项就生成多少项。当我们需要展示的列表数上50个的时候,效率就会急剧下降,在某些性能差得手机上,因为列表太多导致都没法拖动的现象。
这两天在ngui的基础上写了一个列表项可以重复利用的demo。
这个demo主要包括3种list:1 普通的重复利用列表 2 在普通的重复利用列表中加入了可以直接定位到某一行的的功能3 每一个列表拥有展开功能的重复利用列表
demo:
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/06/77ebac6bb1b089bc4fd1d461d3eb94b1)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/06/cef8f840c563ba00a238d4671489f801)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/06/844a053ed49de63f6ef787f731bfe561)
主要思想
最上面和最下面的列表项永远不动(避免ngui的 UiscrollView 类的坐标乱动)。FixedUpdate判断是否 绑定UiscrollView 的这个对象是否有拖动,如果有通过对比上一次的位置得到是向上还是向下拖动。每次的拖动去判断是否有列表已经出了显示区,然后重置有重复列表项的位置。
源码及demo
以下是使用步骤,如有不妥的地方,欢迎大家指出--------by 伊始的温暖
![](https://oscdn.geek-share.com/Uploads/Images/Content/201705/40da226498c84c92e2ee7e86a0b4fd72.gif)
使用步骤
如果没有ngui,请先导入ngui
1 首先新建一个空对象MyList,给这个对象绑定一下的ngui脚本
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/06/0e93da61fcb736f90573f8981ff8b0e4)
2 在MyList下加一个sprite作为这个列表的背景,拖动摄像机距离,使得背景能看到
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/06/ad1f8029f88d7c6055d96c2f9f2d6681)
3 在Mylist下面新建一个空对象View,这个View就是列表的父类,首先给view绑定一个ngui的UIScrollView的脚本,这时他会自动帮你加一个UIPlane的脚本。
1这个是层级,我们需要把我们的层级设置的比父类高一些,
2我们需要把列表出界的部分隐藏的
3 这个地方很重要,他就是我们列表的中显示区域的设置地方,我们在缩放大小的时候可以看到白色的框里面的紫色区域在变化
4 这个设置是如果我们的列表项不足以填充满我们的区域的话,就不能拖动
5 这会我们是做的纵向拖动的列表
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/06/b7477b213e50e52ff8dfad87c22219eb)
4然后开始做我们的item,需要给这个item添加一个ngui的UIDragScrollView的脚本,且需要添加一个碰撞盒子来监听拖动事件
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/06/a99dfa64cae1f572804006d6432eec3f)
5这时关于NGUI的准备都做完了, 现在来加我们自己的代码。在我们的item上面绑定Item这个脚本,由脚本里面的Laber来显示我们的数据,再生成一个预制。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/06/0134875f749cc1d2fe4b54391bf927a3)
6在MyList上加入ListWindow脚本,并填写相关的参数。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/06/da7d2166234eb4a95ad4536732376552)
7Ok,我们现在的工作都做完了,我们写了一个测试代码,现在我们绑定在我们的相机上面,因为我们用到了Ngui的拖动监听事件(就是我们刚刚加的ngui的脚本里面)我们需要再相机上加入一个ngui的UICamera脚本。并且给我们的测试代码填写相关的参数,strs是我们模拟的数据,需要输入一个长度。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/06/4086fd1cb199660d62c75d7d6e6f2507)
8 大功告成
这两天在ngui的基础上写了一个列表项可以重复利用的demo。
这个demo主要包括3种list:1 普通的重复利用列表 2 在普通的重复利用列表中加入了可以直接定位到某一行的的功能3 每一个列表拥有展开功能的重复利用列表
demo:
主要思想
最上面和最下面的列表项永远不动(避免ngui的 UiscrollView 类的坐标乱动)。FixedUpdate判断是否 绑定UiscrollView 的这个对象是否有拖动,如果有通过对比上一次的位置得到是向上还是向下拖动。每次的拖动去判断是否有列表已经出了显示区,然后重置有重复列表项的位置。
源码及demo
以下是使用步骤,如有不妥的地方,欢迎大家指出--------by 伊始的温暖
![](https://oscdn.geek-share.com/Uploads/Images/Content/201705/40da226498c84c92e2ee7e86a0b4fd72.gif)
使用步骤
如果没有ngui,请先导入ngui
1 首先新建一个空对象MyList,给这个对象绑定一下的ngui脚本
2 在MyList下加一个sprite作为这个列表的背景,拖动摄像机距离,使得背景能看到
3 在Mylist下面新建一个空对象View,这个View就是列表的父类,首先给view绑定一个ngui的UIScrollView的脚本,这时他会自动帮你加一个UIPlane的脚本。
1这个是层级,我们需要把我们的层级设置的比父类高一些,
2我们需要把列表出界的部分隐藏的
3 这个地方很重要,他就是我们列表的中显示区域的设置地方,我们在缩放大小的时候可以看到白色的框里面的紫色区域在变化
4 这个设置是如果我们的列表项不足以填充满我们的区域的话,就不能拖动
5 这会我们是做的纵向拖动的列表
4然后开始做我们的item,需要给这个item添加一个ngui的UIDragScrollView的脚本,且需要添加一个碰撞盒子来监听拖动事件
5这时关于NGUI的准备都做完了, 现在来加我们自己的代码。在我们的item上面绑定Item这个脚本,由脚本里面的Laber来显示我们的数据,再生成一个预制。
6在MyList上加入ListWindow脚本,并填写相关的参数。
7Ok,我们现在的工作都做完了,我们写了一个测试代码,现在我们绑定在我们的相机上面,因为我们用到了Ngui的拖动监听事件(就是我们刚刚加的ngui的脚本里面)我们需要再相机上加入一个ngui的UICamera脚本。并且给我们的测试代码填写相关的参数,strs是我们模拟的数据,需要输入一个长度。
8 大功告成
相关文章推荐
- BMFont中文字体图集制作的方法~(for unity ngui)
- BMFont中文字体图集制作的方法~(for unity ngui)
- 【unity拓展】使列表支持拖动排序(Reorderablelist)
- NGUI ScrollView辅助插件“Super Scroll List for NGUI”
- python基础-迭代器、for底层机制、生成器、list结合yield、__call__、yield函数列表
- ArcGIS For JavaScript API Dynamically create layer list(动态创建图层列表)————(八)
- 【小松教你手游开发】【unity实用技能】List列表排序
- unityTaidou(一)NGUI之列表的创建与使用
- 基于Unity-NGUI的可重用列表
- NGUI下拉列表PopList
- BMFont中文字体图集制作的方法~(for unity ngui)
- BMFont中文字体图集制作的方法~(for unity ngui)
- BMFont中文字体图集制作的方法~(for unity ngui)
- unityTaidou(二)NGUI之列表的动态创建
- BMFont中文字体图集制作的方法~(for unity ngui)
- BMFont中文字体图集制作的方法~(for unity ngui)
- BMFont中文字体图集制作的方法~(for unity ngui)
- UNITY 3D 下拉列表的设置(popup list)
- Unity NGUI Popuplist
- ArrayList /Vector/LinkedList用/迭代器遍历 /列表迭代器遍历 /使用size()和get()方法遍历/使用增强for遍历集合