Unity(一)关于Unity Dropdown控件的使用心得

/*更新记录:20190508*/

说明:以下分日期记录并分享自己使用的经验

           快速上手开发请参考最新日期的更新

核心在于dropdown.value 知道我们选择的索引是哪一个Item

2017功能记录

1:首先看一下控件组成

Unity(一)关于Unity Dropdown控件的使用心得_第1张图片

Lable和Arrow是用来显示初始化的文字和勾选项的,Lable会根据首选项的内容自动更改。

Template是Dropdown的模板样式,其中Background和Checkmark的图集资源我们可以提前更改。

2:看一下Dropdown的属性面板

Caption Text和Caption Image是作为下拉列表首选项的文字和图片显示,也是我们每次选择后的内容,因此可代码调用获取

Item Text作为下拉列表中每个item的文字显示,Item Image可以用来扩展模板增加内容

Value值会随着下拉列表选项的不同而变化,dropdown.value

Options选项栏内:可以动态赋值给Item对象  Dropdown.OptionData

 

4:代码模块

说明:参考他人的代码,并做了修改

    public string[] showText;//每个Item下的Text,用来显示和修改
    public Sprite[] sprite;//自己用来换每个Item的背景显示
    Dropdown dropDownItem;
    List temoNames;
    List sprite_list;
    void Start()
    {
        dropDownItem = this.GetComponent();
        temoNames = new List();
        sprite_list = new List();
        
        AddNames();
        UpdateDropDownItem(temoNames);
        
    }


    void UpdateDropDownItem(List showNames)
    {
        dropDownItem.options.Clear();
        Dropdown.OptionData temoData;
        for (int i = 0; i 

 

 

这样可以在Templete里添加图,这样游戏内的看着好看的下拉列表就完成了。如下。。。好吧我承认丑

Unity(一)关于Unity Dropdown控件的使用心得_第2张图片

 

 

2019更新记录

 

需求:点击下拉列表的内容后就执行功能,类似Button事件。其实组件下方的OnValueChanged这个UnityEvent已经是我们要的功能了

下面用两种方法达到同样效果,推荐方法2

使用方法1:

a:首先创建一个脚本挂载在Dropdown组件下,继承ISelectHandler,把dropdown组件拖过来

using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;
public class Drop : MonoBehaviour,ISelectHandler
{
    public Dropdown drop;
    private int lastIndex;
   
    public void OnSelect(BaseEventData eventData)
    {
        //避免点击下拉列表item和dropdown重复调用
        if (drop.value == lastIndex) return;
        
        //处理逻辑
        //

        Debug.Log("OnSelect=" + drop.value);
        lastIndex = drop.value;
    }
}

 

b:这样当我们选择下拉列表对应Item,会触发类似button事件

使用方法2:

使用API自带的监听事件

using UnityEngine;
using UnityEngine.UI;
[RequireComponent(typeof(Dropdown))]
public class Drop : MonoBehaviour
{
    private Dropdown drop;
    void Start()
    {
        drop = this.GetComponent();
        drop.onValueChanged.AddListener(Change);
    }
    private void Change(int index)
    {
        Debug.Log(index);       
        switch (index)
        {
            case 0: break;
            case 1: break;
            default: break;
        }
    }
}

 

 

 

 

PS:欢迎交流问题留言。





   

你可能感兴趣的:(学习心得)