using System; using System.Collections.Generic; using TMPro; using UnityEngine; namespace Cielonos.Settings.UI { /// /// enum 字段的设置条目 — 使用 TMP_Dropdown。 /// 自动从枚举类型生成选项列表。 /// public class SettingsEntryDropdown : SettingsEntryBase { [SerializeField] private TMP_Dropdown dropdown; private Array enumValues; protected override void SetupUI() { if (dropdown == null) return; enumValues = Enum.GetValues(fieldInfo.FieldType); dropdown.ClearOptions(); var options = new List(enumValues.Length); foreach (object val in enumValues) { options.Add(val.ToString()); } dropdown.AddOptions(options); dropdown.onValueChanged.AddListener(OnDropdownChanged); } public override void RefreshValue() { if (dropdown == null || enumValues == null) return; object currentValue = GetFieldValue(); for (int i = 0; i < enumValues.Length; i++) { if (enumValues.GetValue(i).Equals(currentValue)) { dropdown.SetValueWithoutNotify(i); break; } } } private void OnDropdownChanged(int index) { if (enumValues != null && index >= 0 && index < enumValues.Length) { SetFieldValue(enumValues.GetValue(index)); } } private void OnDestroy() { if (dropdown != null) dropdown.onValueChanged.RemoveListener(OnDropdownChanged); } } }