using System.Reflection; using TMPro; using UnityEngine; using UnityEngine.UI; namespace Cielonos.Settings.UI { /// /// 带 [Range] 特性的 int 字段的设置条目 — 使用 Slider + 数值文本。 /// public class SettingsEntrySlider : SettingsEntryBase { [SerializeField] private Slider slider; [SerializeField] private TMP_Text valueText; protected override void SetupUI() { if (slider == null) return; var rangeAttr = fieldInfo.GetCustomAttribute(); if (rangeAttr != null) { slider.minValue = rangeAttr.min; slider.maxValue = rangeAttr.max; } slider.wholeNumbers = true; slider.onValueChanged.AddListener(OnSliderChanged); } public override void RefreshValue() { if (slider == null) return; int currentValue = (int)GetFieldValue(); slider.SetValueWithoutNotify(currentValue); UpdateValueText(currentValue); } private void OnSliderChanged(float value) { int intValue = Mathf.RoundToInt(value); SetFieldValue(intValue); UpdateValueText(intValue); } private void UpdateValueText(int value) { if (valueText != null) valueText.text = value.ToString(); } private void OnDestroy() { if (slider != null) slider.onValueChanged.RemoveListener(OnSliderChanged); } } }