Unity中的【Dropdown(包括TMP_Dropdown)下拉框当只有一个下拉值时多次点击 OnValueChange事件无效】的改进方法

这篇具有很好参考价值的文章主要介绍了Unity中的【Dropdown(包括TMP_Dropdown)下拉框当只有一个下拉值时多次点击 OnValueChange事件无效】的改进方法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Dropdown(包括TMP_Dropdown)下拉框当只有一个下拉值时,多次点击下拉框,并选择选项时, OnValueChange事件不响应

一、下拉框提供了一个【onValueChance】的事件接口

当下拉框值变化的时候,代表用户选择了新的值,于是执行对应逻辑

MyDropdown.onValueChanged.AddListener((idx) =>
        {
        		//响应用户选择的item逻辑    
        });

二、当下拉框只有一个item的时候,点选事件之后,选项值没有变化

Unity中的【Dropdown(包括TMP_Dropdown)下拉框当只有一个下拉值时多次点击 OnValueChange事件无效】的改进方法,unity,游戏引擎,dropdown,onValueChange
在当前情形之下,用户onValueChanged事件无法响应,因为value没有改变,那么如何补救呢?

三、补救的方法

1、dropdown的工作原理

(1)如图【钻模】是一个dropdown,当用户没有点击它的时候,它的droplist是不显示的
Unity中的【Dropdown(包括TMP_Dropdown)下拉框当只有一个下拉值时多次点击 OnValueChange事件无效】的改进方法,unity,游戏引擎,dropdown,onValueChange
(2)用户点击dropdown控件后,下拉框展开,实际上是动态生成下拉的item,如下所示:
Unity中的【Dropdown(包括TMP_Dropdown)下拉框当只有一个下拉值时多次点击 OnValueChange事件无效】的改进方法,unity,游戏引擎,dropdown,onValueChange
(3)Dropdown List的构成如下所示:
每个展开的item,父节点都是一个Toggle,而且它的命名也很固定
[Item0:钻模],冒号前面是index,冒号后面选项的名字
Unity中的【Dropdown(包括TMP_Dropdown)下拉框当只有一个下拉值时多次点击 OnValueChange事件无效】的改进方法,unity,游戏引擎,dropdown,onValueChange

2、拯救的方法

dropdown被点时,添加一下处理流程:

  • 【1】等下拉框展示
  • 【2】找到【Dropdown List】
  • 【3】找到【Dropdown List】下的【toggle】并绑定脚本
  • 【4】每个toggle绑定一个PointerClick事件:被点击时激发dropdown控件的onValueChanged事件

遵上所述,给dropdown控件(menuDropdown)添加以下代码:

/*
 *  ---- onValueChanged的bug ----
 *如果下拉框只有一个item,则value不能change,无法触发onValueChanged
 */

//用户点击下拉框中的toggle item时的事件处理
menuDropdown.GetComponent<EventTrigger>().AddListener(EventTriggerType.PointerClick,async (PointerEventData eventData) =>
    {
        //【1】下拉框展示
        Debug.Log("下拉框展示");
        await UniTask.DelayFrame(2); //等待2帧,让物体【Dropdown List】生成

        //【2】找到【Dropdown List】
        var droplist = menuDropdown.GetComponentsInChildren<Transform>(true)
            .First(x => x.name == "Dropdown List");

        Debug.Log($"物体Dropdown List = {droplist}");

        //【3】找到【Dropdown List】下的【toggle】并绑定脚本
        var toggles = droplist.GetComponentsInChildren<Toggle>(true);

        //【4】每个toggle绑定一个PointerClick事件:被点击时激发dropdown控件的onValueChanged事件
        foreach (var toggle in toggles)
        {
            Debug.Log(toggle.name);
            if (!toggle.GetComponent<EventTrigger>()) toggle.gameObject.AddComponent<EventTrigger>();
            toggle.gameObject.AddComponent<EventTrigger>().AddListener(EventTriggerType.PointerClick,
                async (PointerEventData eventData) =>
                {
                    Debug.Log($"点击的toggle为:{toggle.name}");
                    var idx = toggle.name.Split(":")[0].Replace("Item","");
                    Debug.Log($"点击的toggle 的 idx为:{idx}");

                    //** 如果只有一个下拉框,则主动触发一个onValueChanged事件 **
                    if (menuDropdown.options.Count == 1)
                    {
                        menuDropdown.onValueChanged.Invoke(int.Parse(idx));
                    }
                });
        }
    });

OnValueChange事件的绑定实现:文章来源地址https://www.toymoban.com/news/detail-617186.html

//用户选择
menuDropdown.onValueChanged.AddListener((idx) =>
{        
	//......  
});

到了这里,关于Unity中的【Dropdown(包括TMP_Dropdown)下拉框当只有一个下拉值时多次点击 OnValueChange事件无效】的改进方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Unity-UGUI控件全面解析】| Dropdown 下拉菜单组件详解

    🎬 博客主页:https://xiaoy.blog.csdn.net 🎥 本文由 呆呆敲代码的小Y 原创,首发于 CSDN 🙉 🎄 学习专栏推荐:

    2024年02月06日
    浏览(59)
  • unity 如何设置一个未选择的(默认值为空)的下拉列表dropdown

         unity设置下拉列表时总是指定一个默认选择值,如何设置一个在启动时未被选择的dropdown,如下:      1.设置一个inputfield或者text覆盖住dropdown文字,inputfield      2.list添加一个默认项default,liststring temp=new liststring{\\\"1\\\",\\\"2\\\",\\\"3\\\",\\\"default\\\"};       3.初始化dropdown: dropdown.addopt

    2024年02月14日
    浏览(34)
  • Unity3D邪门实现之GUI下拉菜单Dropdown设计无重复项

    ** Unity3D邪门实现系列为博主在实际开发过程中遇到一些需求,由于个人水平无法正经实现退而采用“歪道”实现同样的效果。** 该系列仅用于分享思路,若有错误或“多此一举”的地方,也请大家多多指正。 利用按钮和下拉菜单结合的形式,点击按钮显示下拉菜单,实现菜

    2024年02月02日
    浏览(41)
  • unity 一键替换 UI上所有字体,批量替换字体(包括:Text和Text (TMP))

    目录 前言:在开发中会遇到这种情况,开发完了,发现UI字体没有替换,特别是需要发布到WebGL端的同学,突然发现无法显示汉字了。下面一个非常方便的方法完美解决。 1.解压出来的脚本放在Edit文件下,没有的创建一个 2.如何使用  3.开始替换 前言:在开发中会遇到这种情

    2024年02月03日
    浏览(39)
  • ElementUI浅尝辄止28:Dropdown 下拉菜单

    将动作或菜单折叠到下拉菜单中。 移动到下拉菜单上,展开更多操作。 可使用按钮触发下拉菜单。 可以配置 click 激活或者 hover 激活。 可以 hide-on-click 属性来配置。 点击菜单项后会触发事件,用户可以通过相应的菜单项 key 进行不同的操作 Dropdown 组件提供除了默认值以外的

    2024年02月09日
    浏览(63)
  • Vue 中修改 Element 组件的 下拉菜单(Dropdown) 的样式

    今天在项目中碰到一个 UI 改造的需求,需要根据设计图把页面升级成 UI 设计师提供的设计图样式。 到最后页面改造完了,但是 UI 提供的下拉菜单样式全部是黑色半透明的,只能硬着头皮改了。 然后,就有了一下午的头脑风暴。 一开始,我是想着使用 /deep/ 来深度修改样式

    2024年01月17日
    浏览(65)
  • Element UI更改下拉菜单el-dropdown-menu样式

    源代码: 这个样式更改还是有点费劲的,如图: 我想更改el-dropdown-item的样式,但是正常覆盖更改无法生效的,从渲染结构可以看出来这个下拉菜单的渲染列表是在文档最底部的。 vue文件新建一个 style样式, 不加scoped; 为保证这个组件的样式 不会影响到其他页面组件样式

    2024年02月09日
    浏览(78)
  • vue+element-ui Dropdown下拉菜单(获取某行数据)

    1、通过command方法直接传当前选中行的整个数据 html js 效果:

    2024年02月16日
    浏览(59)
  • 微信小程序封装自定义van-dropdown-item 下拉选择框

    1.vant weapp虽然给我们提供了van-dropdown-item且美观的组件但是没有插槽无法自定义内容,限制了各位大神的操作,接下来我们先来了解他的使用在去封装自己的自定义 这是官方自己的效果! 下面来看看我们自己封装的组件 2.还能自定义搜索框等等是不是很奈斯! 接下来我们在

    2024年02月11日
    浏览(49)
  • element-plus修改下拉菜单Dropdown-Item 样式(popper-class)

    当我们对下拉菜单内的item的样式进行修改时,我们可以使用 但是这样就会导致全局的下拉框样式都变为一样,为了避免这种情况,我们可以使用dropdown中的popper-class属性

    2024年02月12日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包