using UnityEngine; using UnityEngine.UI; using TMPro; using UnityEngine.Events; /// /// 通用设置项组件 /// 可复用的设置面板UI组件,支持多种控件类型 /// public class SettingItemComponent : MonoBehaviour { [Header("基础设置")] public TextMeshProUGUI TitleText; public TextMeshProUGUI DescriptionText; public Image IconImage; [Header("控件容器")] public Transform ControlContainer; // 动态创建的控件引用 private Slider _slider; private Toggle _toggle; private TMP_InputField _inputField; private TMP_Dropdown _dropdown; private Button _actionButton; // 事件 public UnityEvent OnSliderChanged = new UnityEvent(); public UnityEvent OnToggleChanged = new UnityEvent(); public UnityEvent OnInputChanged = new UnityEvent(); public UnityEvent OnDropdownChanged = new UnityEvent(); public UnityEvent OnButtonClicked = new UnityEvent(); /// /// 设置基础信息 /// public void SetInfo(string title, string description = "", Sprite icon = null) { if (TitleText != null) TitleText.text = title; if (DescriptionText != null) DescriptionText.text = description; if (IconImage != null) { IconImage.sprite = icon; IconImage.gameObject.SetActive(icon != null); } } /// /// 创建滑块控件 /// public Slider CreateSlider(float minValue, float maxValue, float currentValue, bool wholeNumbers = false) { ClearControls(); var sliderGO = CreateSliderGameObject(); _slider = sliderGO.GetComponent(); _slider.minValue = minValue; _slider.maxValue = maxValue; _slider.value = currentValue; _slider.wholeNumbers = wholeNumbers; _slider.onValueChanged.AddListener(OnSliderValueChanged); return _slider; } /// /// 创建开关控件 /// public Toggle CreateToggle(bool isOn) { ClearControls(); var toggleGO = CreateToggleGameObject(); _toggle = toggleGO.GetComponent(); _toggle.isOn = isOn; _toggle.onValueChanged.AddListener(OnToggleValueChanged); return _toggle; } /// /// 创建输入框控件 /// public TMP_InputField CreateInputField(string placeholder = "", string currentValue = "") { ClearControls(); var inputGO = CreateInputFieldGameObject(); _inputField = inputGO.GetComponent(); _inputField.text = currentValue; if (!string.IsNullOrEmpty(placeholder)) { _inputField.placeholder.GetComponent().text = placeholder; } _inputField.onValueChanged.AddListener(OnInputValueChanged); return _inputField; } /// /// 创建下拉框控件 /// public TMP_Dropdown CreateDropdown(string[] options, int selectedIndex = 0) { ClearControls(); var dropdownGO = CreateDropdownGameObject(); _dropdown = dropdownGO.GetComponent(); _dropdown.options.Clear(); foreach (string option in options) { _dropdown.options.Add(new TMP_Dropdown.OptionData(option)); } _dropdown.value = selectedIndex; _dropdown.onValueChanged.AddListener(OnDropdownValueChanged); return _dropdown; } /// /// 创建按钮控件 /// public Button CreateButton(string buttonText) { ClearControls(); var buttonGO = CreateButtonGameObject(); _actionButton = buttonGO.GetComponent