改写Unity DropDown 支持多次点击同一选项均回调
[很久前的一个Note,不知道现在的Unity Dropdown是否已经支持该特性]
Unity UGUI是开源的: https://bitbucket.org/Unity-Technologies/ui
可以下载到UI的代码阅读并改写
下面的DropdownEx类在Dropdown基础上,增加一个m_AlwaysCallback 变量,勾选后每次点击都会触发回调
using System; using System.Collections; using System.Collections.Generic; using UnityEngine.Events; using UnityEngine.EventSystems; using UnityEngine.UI.CoroutineTween; using UnityEngine.UI; using UnityEngine;public class DropdownEx : Dropdown {public bool m_AlwaysCallback = false;public void Show(){base.Show();Transform toggleRoot = transform.FindChild("Dropdown List/Viewport/Content");Toggle[] toggleList = toggleRoot.GetComponentsInChildren<Toggle>(false);for(int i = 0; i < toggleList.Length; i++){Toggle temp = toggleList[i];temp.onValueChanged.RemoveAllListeners();temp.isOn = false;temp.onValueChanged.AddListener(x => OnSelectItemEx(temp));}}public override void OnPointerClick(PointerEventData eventData){Show();}public void OnSelectItemEx(Toggle toggle){if (!toggle.isOn){toggle.isOn = true;return;}int selectedIndex = -1;Transform tr = toggle.transform;Transform parent = tr.parent;for (int i = 0; i < parent.childCount; i++){if (parent.GetChild(i) == tr){// Subtract one to account for template child.selectedIndex = i - 1;break;}}if (selectedIndex < 0)return;if (value == selectedIndex && m_AlwaysCallback)onValueChanged.Invoke(value);elsevalue = selectedIndex;Hide();}}
补充下Editor脚本
using UnityEngine.UI; using UnityEditor; using UnityEditor.UI;[CustomEditor(typeof(DropdownEx), true)] [CanEditMultipleObjects] public class DropdownExEditor : DropdownEditor {SerializedProperty m_AlwaysCallback;protected override void OnEnable(){base.OnEnable();m_AlwaysCallback = serializedObject.FindProperty("m_AlwaysCallback");}public override void OnInspectorGUI(){base.OnInspectorGUI();EditorGUILayout.PropertyField(m_AlwaysCallback);serializedObject.ApplyModifiedProperties();} }
转载于:https://www.cnblogs.com/wmalloc/p/7234319.html
改写Unity DropDown 支持多次点击同一选项均回调相关推荐
- Unity 2021创建2D休闲点击器游戏视频教程
Unity 2021创建2D休闲点击器游戏视频教程 Learn how to create a 2D Idle Clicker Game in Unity 2021 了解如何在Unity 2021中创 ...
- QComboBox 鼠标点击触发 选项更新
QComboBox 鼠标点击触发选项更新,不重写QComboBox类. 让 ui 中的 QComboBox 控件有点击交互,QComboBox 控件其实就是一个下拉框样式的控件,这个下拉框提供的交互是 ...
- 支持的vCenter Server High Availability选项(2096800)
最近更新时间: 2017年8月16日分类:最佳做法 订阅 病征 免责声明:本文为支持vCenter Server的高可用性选项(1024051)的翻译版本尽管我们会不断努力为本文提供最佳翻译版本,但 ...
- 点击菜单选项,右侧主体区新增子界面(Tab)的实现
今天是2019年小年后一天,还有三天回家过年. 今天记录一下一种前端页面的效果的实现,这种效果很常见,一般用于网站后台系统的前端页面.一般后台系统会分为顶部导航栏,左边的菜单栏和右边的主体区.有一种效 ...
- 鼠标在用了一段之后偶然发现以给特别慢的速度移动鼠标,会在移动到可点击的选项按钮附近明显的卡住问题。
鼠标在用了一段之后偶然发现以给特别慢的速度移动鼠标,会在移动到可点击的选项按钮附近明显的卡住问题. 买的罗技的G pro,近期重装了一遍系统偶然发现这个问题,已经严重影响了鼠标的使用,制表制图的时候很 ...
- Mac Dropbox 点击“首选项”无反应 没反应怎么办?
Mac Dropbox 点击"首选项"无反应 没反应怎么办? macOS 下解决新安装 Dropbox 后无法设置代理,点击"首选项"无反应怎么办? 搜索一下 ...
- element ui upload组件文件上传一次 后,不论是上传成功之后修改文件再上传还是上传失败重新上传,再次点击上传均无反应。
问题: Element UI Upload 组件文件上传一次 后,不论是上传成功之后修改文件再上传还是上传失败重新上传,再次点击上传均无反应. 原因: 第一次上传文件后,浏览器还保存着我们已经上传的文 ...
- 【Unity】XPS模型导入Unity(支持VRChat)
所需要的资源 (百度云:链接:https://pan.baidu.com/s/1kyCs_HLUJ5j02ENbHgvzCQ 提取码:1234 ) 可以使用该方法,将xps模型制作成VRChat的模型 ...
- unity dropdown 界面设计
摆界面的时候 遇到这种界面 需要下拉列表框 记录一下经过 使用unity里自带的 dropdown 在Hierarchy界面创建一个Dropdown 这个是基础这里就不多讲了 最终功能:点击下拉列 ...
最新文章
- ceph auth get_服装百科|get到羽绒服的“绒”干货,你就能做好设计
- php小程序登录code无效,微信小程序出现“invalid code”怎么办
- java填空题答案_JAVA求填空题答案
- FlexPaper不能跨服务器加载远程文件解决办法
- MACOS远程访问树莓派桌面
- linux还原windows,双系统如何删除Linux,恢复Windows从 MBR引导启动?
- 画个火山图,标记下基因的名字
- 并发-阻塞队列源码分析
- SAP License:SAP中的默认帐户与密码应用
- 量化中需留意的坑之二
- java arraylist add时默认调用tostring_java中如何调用toString命名的方法?
- 什么是交叉编译?个人对交叉编译的理解
- Drools规则引擎简介
- 二维码墓碑的技术探讨
- Unity-WebGL遇到的各种坑(一)
- VC++连接wifi功能(有密码)源代码
- C#WebApi下载文件
- BLE Mesh (9) —— Mesh beacons
- 最强nba体验服显示服务器正在停机,最强NBA体验服
- 错误代码 missing-signature 错误原因: 缺少签名参数-自查方案
热门文章
- java编程里的values怎么使用,详解Java编程中super关键字的用法
- tablepc是什么平板电脑_54位平板电脑充电柜长什么样?安和力
- 安装 mysql-8.0.23-winx64
- Spring Boot系列四 Spring @Value 属性注入使用总结一
- Windows10下jupyter notebook无法打开,如何解决?
- java adt mac_Mac下搭建Eclipse Android开发环境
- vue中引入swiper
- c语言数码管编写程序,跪求单片机0~99数码管显示用C语言编写的程序
- CSS学习17之动画
- 从Java多线程可见性谈Happens-Before原则