using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class OpcOrder2 : MonoBehaviour { public Dropdown dropdown; // Dropdown 组件 private string originalText; // 存储原始显示的文字 public static OpcOrder2 opcOrder2; public string defaultOption = "不想上班!"; // 默认选项 private bool isDropdownInitialized = false; private void Start() { // 初始化 Dropdown if (dropdown == null) { dropdown = GetComponent(); } // 清空默认选项 dropdown.options.Clear(); // 添加默认显示的选项 dropdown.options.Add(new Dropdown.OptionData(defaultOption)); // 默认选项A dropdown.captionText.text = defaultOption; // 设置默认显示文字 // 初始化下拉选项(不包括 A) dropdown.options.Add(new Dropdown.OptionData("选项 B")); dropdown.options.Add(new Dropdown.OptionData("选项 C")); dropdown.options.Add(new Dropdown.OptionData("选项 D")); // 添加值变化事件 dropdown.onValueChanged.AddListener(OnDropdownValueChanged); // 初始化绑定选项的点击事件 BindToggleEvents(); } // 设置默认选项文本,外部可以调用这个方法改变默认文本 public string SetText(string str) { defaultOption = str; dropdown.captionText.text = defaultOption; // 设置默认选项的显示文本 return str; } // 当下拉框的值改变时触发 private void OnDropdownValueChanged(int index) { if (isDropdownInitialized) { // 更新下拉框显示的文字为选中的选项 // 但是不改变默认选项的值 dropdown.captionText.text = dropdown.options[index].text; // 执行自定义逻辑 Debug.Log($"点击了选项:{dropdown.options[index].text}"); } isDropdownInitialized = true; } // 动态绑定选项的 Toggle 点击事件 private void BindToggleEvents() { // 获取 Dropdown 的 Template(下拉项模板) Transform dropdownTemplate = dropdown.transform.Find("Template"); if (dropdownTemplate != null) { Transform viewport = dropdownTemplate.Find("Viewport"); if (viewport != null) { Transform content = viewport.Find("Content"); if (content != null) { // 遍历 Content 下的所有子物体(即下拉列表中的选项) foreach (Transform option in content) { Toggle toggle = option.GetComponent(); if (toggle != null) { string optionText = option.GetComponentInChildren().text; // 为每个选项绑定点击事件 toggle.onValueChanged.AddListener((isOn) => { if (isOn) { HandleOptionClick(optionText); toggle.isOn = false; // 重置 Toggle 状态,防止选项保持选中 } }); } } } } } else { Debug.LogWarning("未找到 Dropdown 的 Template 部分,无法绑定点击事件!"); } } // 处理选项点击逻辑 private void HandleOptionClick(string optionText) { Debug.Log($"点击了选项:{optionText}"); // 根据点击的选项执行不同的逻辑 switch (optionText) { case "选项 B": Debug.Log("执行选项 B 的逻辑!"); break; case "选项 C": Debug.Log("执行选项 C 的逻辑!"); break; case "选项 D": Debug.Log("执行选项 D 的逻辑!"); break; default: Debug.LogWarning($"未处理的选项:{optionText}"); break; } } }