关于Unity中DropDown的使用
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于Unity中DropDown的使用相关的知识,希望对你有一定的参考价值。
参考技术A 1.有时候需要DropDown作为配置,为之后的算法或操作,作为执行的条件之一.2.有时候DropDown作为一个独立效果的按键,点击之后,马上执行相应的方法;
Unity 改写Dropdown支持多次点击同一选项均回调
1.UGUI自带的Dropdown,创建之后,运行场景默认选择第一个选项,再次点击第一个选项也不会触发,因项目需求,所以要改成多次点击有效
2.创建下拉框(Dropdown),创建好之后删除Dropdown组件
3.创建c#脚本 (重写下拉框,添加一个bool变量用来控制)
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.UI; public class DropdownEx : Dropdown { public bool m_AlwaysCallback = false; public void ShowController() { base.Show(); Transform toggleRoot = transform.Find("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) { ShowController(); } 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); else value = selectedIndex; Hide(); } }
4.把脚本添加到下拉框上面会出现新的组件(如下图所示)
箭头处需要自己拖上去
5.创建一个Editor脚本放在Editor文件夹下
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using UnityEditor; using UnityEditor.UI; [CustomEditor(typeof(DropdownEx), true)] [CanEditMultipleObjects] public class DropdowmExEditor : 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(); } }
需要重复点击就勾选上 m_AlwaysCallback 变量
❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤
❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤
❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤
以上是关于关于Unity中DropDown的使用的主要内容,如果未能解决你的问题,请参考以下文章
动态渲染 Bootstrap Vue Dropdown 元素
Unity2017.1官方UGUI文档翻译——Dropdown