130 lines
4.0 KiB
C#
130 lines
4.0 KiB
C#
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>();
|
||
}
|
||
|
||
// 清空默认选项
|
||
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<Toggle>();
|
||
if (toggle != null)
|
||
{
|
||
string optionText = option.GetComponentInChildren<Text>().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;
|
||
}
|
||
}
|
||
}
|