Unity3D开发之遇上Dropdown
unity应该是在5.0版本更新了新的UI组件,Dropdown。以前实现这个功能都需要自己来组装。现在集成化确实对开发者来说更快更方便。下面说下我在开发中遇到的跟Dropdown相关的问题。
unity的UGUI组件功能绑定更偏向于界面话,我们可以在编辑器中将函数绑定到组件中。但是当我们将canvas做成预制体之后,每次更新Canvas后,Canvas下的组件绑定的函数都会自动丢失。如果我们项目中很多场景共用一个Canvas,我们还需要一个个手动绑定函数,确实太糟心了。我们就可以使用程序来自动绑定。Button的和Dropdown的OnvalueChange函数绑定代码如下:
_DataWindow.Find("Button").GetComponent<Button>().onClick.AddListener(OnDataListButtonClick);SceneNameDropdown.onValueChanged.AddListener(x=> OnValueChange());
这样我们就不需要去担忧函数的绑定丢失了。
项目中,我们还有一个如果Dropdown中的选择项是变化的,我们就需要根据程序来动态添加。
//重置Dropdown 根据脚本更新DropdownSceneNameDropdown.ClearOptions();for (int i = 0; i < Globle.SceneChineseNameList.Count; i++){Dropdown.OptionData op = new Dropdown.OptionData();op.text = Globle.SceneChineseNameList[i];SceneNameDropdown.options.Add(op);}
还有,当有很多选择项时,比如几百个,我们不可能一个个去找,这时候我们需要做搜索功能。下面我说下搜索到后我们怎么在Dropdown下来菜单中显示搜索到的选择项。
在搜索函数中,我们通常会获取到一个返回值,即是该搜索对象在所有选项储存列表中的索引位置。即Index值。
private void OnSearch(){string _sceneName = sceneNameInput.text.Trim();int _index= Globle.SceneChineseNameList.FindIndex(x=>x==_sceneName);_count = Globle.SceneChineseNameList.Count;print (_index);if (_index < 0)return;SceneNameDropdown.Show();Transform _DropdownList = SceneNameDropdown.transform.Find ("Dropdown List");if (!_DropdownList)return;Transform _content = _DropdownList.GetChild (0).GetChild (0);if(_index>7){ float _y = _content.localPosition.y;if (_count - _index >= 6) _content.DOLocalMoveY (_y + 20 * _index, 0.1f);else _content.DOLocalMoveY (_y + 20 * (_index - 6), 0.1f); }_content.GetChild (_index+1).GetComponent<Selectable> ().Select ();}
这里的6不是固定的,我们要根据一个下拉列表能显示几个选项为准。还有20是每个元素在的宽度。这些都是要我们在实际项目中自己调试。
以上就是我在UI开发中遇到和Dropdown相关的问题。如果能帮助到你,很荣幸!
Unity3D开发之遇上Dropdown相关推荐
- 当开发人员遇上非功能性需求
在开发产品时,你是否考虑过关注功能性需求与非功能性需求的工作量?如果没有,那么你可能应该关注下了,本文将告诉你为什么. 作者 | Chris Horsnell 译者 | 梁蕊 责编 | 仲培艺 出品 ...
- U3d学习-使用Unity3D开发2D游戏(上)
1.创建一个项目 2.将Camera设置为正交投影 游戏的输出画面是通过摄像机所观察的场景来实现的,将场景呈现到2D的计算机屏幕上具有两种不同的投影方式:透视投影和正交投影,默认状态下是透视投影. 透 ...
- [Unity3D]Unity3D游戏开发之当仙剑奇侠传遇上Mecanim动画系统
大家好,我是秦元培,欢迎大家关注我的博客,我的博客地址是 blog.csdn.net/qinyuanpei.博主总算赶在这个月底写出了这篇文章.这个月因为期末考试一直没时间研究太多关于技术方面的东西, ...
- unity3d开发传奇类游戏3D
传奇开发类游戏开发精讲 先上效果 技能治疗 技能伤害 近战 地图数据: vector2 数组.N行N列,描述地图大小.通过数据结构算法得出每个单元格的坐标 [x,y][x,y][x,y] [x,y][ ...
- 《当用户体验设计遇上敏捷》一3.5 小结
本节书摘来自异步社区<当用户体验设计遇上敏捷>一书中的第3章,第3.5节,作者[英]Lindsay Ratcliffe , Marc McNeill,更多章节内容可以访问云栖社区" ...
- 工智能遇上银行反欺诈,到底能帮什么忙
工智能遇上银行反欺诈,到底能帮什么忙 晚来风急 2017-08-02 11:42:00 浏览39 评论0 深度学习 大数据 算法 人工智能 神经网络 摘要: 说到人工智能,大多会联想到聊天机器人.人脸 ...
- 【ArcGIS遇上Python】从入门到精通系列之第一章:ArcGIS Python简介
文章目录 1. Python简介 2. Python的特点 3. ArcGIS的脚本语言 4. ArcGIS中的Python脚本编辑器 1. Python简介 Python是一种跨平台的计算机程序设计 ...
- 一、创建Assetbundle 在unity3d开发的游戏中,无论模型,音频,还是图片等,我们都做成Prefab,然后打包成Assetbundle,方便我们后面的使用,来达到资源的更新。
一.创建Assetbundle 在unity3d开发的游戏中,无论模型,音频,还是图片等,我们都做成Prefab,然后打包成Assetbundle,方便我们后面的使用,来达到资源的更新. 一个Asse ...
- python 暂停程序 等待用户输入_遇上Python程序暂停时,不要慌,教你正确的处理方法...
今天为大家带来的内容是:遇上Python程序暂停时,不要慌,教你正确的处理方法! 文章内容主要介绍了Python程序暂停的实现代码,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下,喜欢的记得点 ...
最新文章
- 唐山松下焊接机器人编程招聘_机器人四小家族-松下Panasonic专注焊接
- webdiyer aspnet pager最近又用这个。还是记录下。
- ubuntu16.04 配置nginx支持redis
- 李开复:年轻人该比谁更拼命吗?
- bytevalue_Java Short类byteValue()方法及示例
- pythonsocket自定义协议_小渣渣学习笔记 python day28【tcp聊天 udp聊天 粘包 自定义协议 struct模块】...
- 董付国老师《Python程序设计基础》完美落幕
- TensorFlow手把手教你概率编程:TF Probability内置了开源教材,新手友好
- mxonline实战14,全局搜索,修改个人中心页面个人资料信息
- 我的家乡主题网页设计
- 深入浅出WPF教程笔记_XAML介绍
- 数据分析 时间序列分析 ARMA模型
- 大学生计算机学科竞赛a类,全国大学生学科竞赛分类名单
- Win10 KeilC51-C251-ARM共存方法
- 根据身份证判断年龄排序
- 导数的四则运算法则_高中生如何学习导数
- 知乎 | 给博士一年级新生的建议!
- 电脑win10无法自动修复此计算机,如何解决Win10自动修复无法修复你的电脑?
- 树莓派驱动水星无线网卡(MW150UH)教程指南
- FMX和VCL混用时RegisterClass无法GetClass或FindClass的问题