前言:
项目中使用的NGUI自带预制物的下拉列表控件中的字体会出现有时候能显示,有时候无法显示的效果,字体选的是U3D默认的字体。而且这种情况是在项目上线后过了一段时间才出现的,非常奇怪,我苦于找不到问题所在,所以最终还是选择了用一下UGUI来实现这个控件,看到网上关于UGUI的下拉列表控件分享的人比较少,我就把我们自己用的分享出来供大家来使用。关于控件的源文件我会放在文章最后分享出来,用法我会在下面文章内容中简单地进行介绍。
使用方法:
右键在面板上选中ComboBox就可以创建出下拉列表控件
效果如下:Tag里面添加一个ComboBox的tag,我为了方便使用加的。。
上面的内容填写应该不需要我一一介绍,如果有不清楚的可以看看源代码里面我注释了一些基本的内容,当然这些内容也可以自行程序里面进行动态添加。
下面我简单介绍一下通过程序控制项目中的下拉列表以及简单的事件的派发处理。
事件绑定我都放在这个静态类里面,暂时只有这两个,一般下拉列表也都是用OnValueChange和OnClick吧。。又需要的话大家可以自行添加需要内容,或者对代码进行修改。。
ComboBoxEventHandler.cs
using System; namespace UGUI.ComboBox { /// <summary> /// 事下拉列表件绑定 /// </summary> public static class ComboBoxEventHandler { /// <summary> /// 绑定选择事件-绑定下拉框条目 /// </summary> public static void addHandler(ComboBoxItem item, Action act) { item.OnSelect += act; } /// <summary> /// 绑定数值改变事件 /// </summary> public static void addHandler(ComboBox comb, Action<int> act) { comb.OnSelectionChanged += act; } } }
接下来就是如何使用了
ComboBoxManage .cs
using System;using UnityEngine; using System.Collections; using UGUI.ComboBox; using System.Collections.Generic; using System; /// <summary> /// 下拉列表管理 /// </summary> public class ComboBoxManage : MonoBehaviour { //存放当前场景中所有下拉列表控件 private List<ComboBox> L_ComboBoxControls; private void Start() { //初始化 L_ComboBoxControls = new List<ComboBox>(); var listControls =GameObject.FindGameObjectsWithTag("ComboBox"); foreach (var item in listControls) { L_ComboBoxControls.Add(item.transform.GetComponent<ComboBox>()); } //绑定事件 //选项 var itemComb1 = new ComboBoxItem("itemComb1 "); var itemComb2= new ComboBoxItem("itemComb2"); ComboBoxEventHandler.addHandler(itemComb1 , ItemComb1); ComboBoxEventHandler.addHandler(itemComb2, ItemComb2); //将列表项添加进入各自的下拉列表 foreach (var item in L_ComboBoxControls) { switch (item.name) { case "iTEM": addItems(item, new ArrayList { itemComb1 , itemComb2}); break; } } } /// <summary> /// 添加列表项 /// </summary> private void addItems(ComboBox comb, ArrayList names) { foreach (var item in names) { comb.AddItems(item); } } private void ItemComb1() { Debug.Log("hello1"); } private void ItemComb2() { Debug.Log("hello2"); } }
我只是简单的列出了一下我的使用方式,供大家参考一下,直接写事件绑定的内容和派发的方式当然也是OK的。
结尾:
其实网上也有看到UGUI控件的树状结构,但是貌似还木有人分享。。。以后我会抽时间把树状结构的UGUI的控件也分享出来。。关于具体实现的部分内容比较多,大家可以自己看看,后面我也会对UGUI的下拉列表源码进行分析一下的。
链接:http://pan.baidu.com/s/1mgN6BR6 密码:yj7y