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