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相关推荐

  1. 当开发人员遇上非功能性需求

    在开发产品时,你是否考虑过关注功能性需求与非功能性需求的工作量?如果没有,那么你可能应该关注下了,本文将告诉你为什么. 作者 | Chris Horsnell 译者 | 梁蕊 责编 | 仲培艺 出品 ...

  2. U3d学习-使用Unity3D开发2D游戏(上)

    1.创建一个项目 2.将Camera设置为正交投影 游戏的输出画面是通过摄像机所观察的场景来实现的,将场景呈现到2D的计算机屏幕上具有两种不同的投影方式:透视投影和正交投影,默认状态下是透视投影. 透 ...

  3. [Unity3D]Unity3D游戏开发之当仙剑奇侠传遇上Mecanim动画系统

    大家好,我是秦元培,欢迎大家关注我的博客,我的博客地址是 blog.csdn.net/qinyuanpei.博主总算赶在这个月底写出了这篇文章.这个月因为期末考试一直没时间研究太多关于技术方面的东西, ...

  4. unity3d开发传奇类游戏3D

    传奇开发类游戏开发精讲 先上效果 技能治疗 技能伤害 近战 地图数据: vector2 数组.N行N列,描述地图大小.通过数据结构算法得出每个单元格的坐标 [x,y][x,y][x,y] [x,y][ ...

  5. 《当用户体验设计遇上敏捷》一3.5 小结

    本节书摘来自异步社区<当用户体验设计遇上敏捷>一书中的第3章,第3.5节,作者[英]Lindsay Ratcliffe , Marc McNeill,更多章节内容可以访问云栖社区" ...

  6. 工智能遇上银行反欺诈,到底能帮什么忙

    工智能遇上银行反欺诈,到底能帮什么忙 晚来风急 2017-08-02 11:42:00 浏览39 评论0 深度学习 大数据 算法 人工智能 神经网络 摘要: 说到人工智能,大多会联想到聊天机器人.人脸 ...

  7. 【ArcGIS遇上Python】从入门到精通系列之第一章:ArcGIS Python简介

    文章目录 1. Python简介 2. Python的特点 3. ArcGIS的脚本语言 4. ArcGIS中的Python脚本编辑器 1. Python简介 Python是一种跨平台的计算机程序设计 ...

  8. 一、创建Assetbundle 在unity3d开发的游戏中,无论模型,音频,还是图片等,我们都做成Prefab,然后打包成Assetbundle,方便我们后面的使用,来达到资源的更新。

    一.创建Assetbundle 在unity3d开发的游戏中,无论模型,音频,还是图片等,我们都做成Prefab,然后打包成Assetbundle,方便我们后面的使用,来达到资源的更新. 一个Asse ...

  9. python 暂停程序 等待用户输入_遇上Python程序暂停时,不要慌,教你正确的处理方法...

    今天为大家带来的内容是:遇上Python程序暂停时,不要慌,教你正确的处理方法! 文章内容主要介绍了Python程序暂停的实现代码,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下,喜欢的记得点 ...

最新文章

  1. 唐山松下焊接机器人编程招聘_机器人四小家族-松下Panasonic专注焊接
  2. webdiyer aspnet pager最近又用这个。还是记录下。
  3. ubuntu16.04 配置nginx支持redis
  4. 李开复:年轻人该比谁更拼命吗?
  5. bytevalue_Java Short类byteValue()方法及示例
  6. pythonsocket自定义协议_小渣渣学习笔记 python day28【tcp聊天 udp聊天 粘包 自定义协议 struct模块】...
  7. 董付国老师《Python程序设计基础》完美落幕
  8. TensorFlow手把手教你概率编程:TF Probability内置了开源教材,新手友好
  9. mxonline实战14,全局搜索,修改个人中心页面个人资料信息
  10. 我的家乡主题网页设计
  11. 深入浅出WPF教程笔记_XAML介绍
  12. 数据分析 时间序列分析 ARMA模型
  13. 大学生计算机学科竞赛a类,全国大学生学科竞赛分类名单
  14. Win10 KeilC51-C251-ARM共存方法
  15. 根据身份证判断年龄排序
  16. 导数的四则运算法则_高中生如何学习导数
  17. 知乎 | 给博士一年级新生的建议!
  18. 电脑win10无法自动修复此计算机,如何解决Win10自动修复无法修复你的电脑?
  19. 树莓派驱动水星无线网卡(MW150UH)教程指南
  20. FMX和VCL混用时RegisterClass无法GetClass或FindClass的问题

热门文章

  1. 灼口综合征的症状和危害要找到解决办法
  2. CSS中的单行、多行文本溢出总结
  3. CSS IE7 IE6 Firefox多浏览器兼容(转摘)
  4. 个人博客作业Week3--必应词典案例分析
  5. 根据陈广老师的视频,做了一个俄罗斯方块
  6. 如何恢复微信账单里删除的记录
  7. 启动Tomcat闪退的问题
  8. 基于ijkplayer 0.8.8编译的完整so. libijkffmpeg.so等,支持ssl h265, rm, rmvb
  9. python字符串高级(切割多个分隔符)
  10. Xilinx Vivado和SDK安装