修复Slider

This commit is contained in:
SoulliesOfficial
2026-06-14 03:48:05 -04:00
parent d24bdfb4c3
commit 545bfae0db
10 changed files with 200752 additions and 1269 deletions

View File

@@ -34,17 +34,19 @@ namespace Ichni.Editor
if (minInputField != null) minInputField.interactable = true;
if (maxInputField != null) maxInputField.interactable = true;
slider.minValue = min;
slider.maxValue = max;
slider.wholeNumbers = wholeNumbers;
// [对象池安全] 精准解绑业务代理
// [对象池安全] 精准解绑业务代理 — 必须在修改 slider range 之前完成,
// 否则 Unity Slider 在 maxValue < 旧 value 时会自动触发 onValueChanged
// 导致旧监听器用旧的 parameterName 将错误值写回对象。
slider.onValueChanged.RemoveListener(OnSliderValueChanged);
valueInputField?.onEndEdit.RemoveListener(OnValueInputEndEdit);
minInputField?.onEndEdit.RemoveListener(OnMinInputEndEdit);
maxInputField?.onEndEdit.RemoveListener(OnMaxInputEndEdit);
customAction = null;
slider.minValue = min;
slider.maxValue = max;
slider.wholeNumbers = wholeNumbers;
base.Initialize(baseElement, title, parameterName);
if (parameterName != string.Empty)
@@ -58,13 +60,13 @@ namespace Ichni.Editor
{
Debug.LogWarning($"[DynamicUI] 尝试绑定 {title} ({parameterName}) 失败,由于其值或路径无效。");
}
slider.onValueChanged.AddListener(OnSliderValueChanged);
}
else
{
slider.onValueChanged.AddListener(OnSliderValueChanged);
}
slider.onValueChanged.AddListener(OnSliderValueChanged);
valueInputField?.onEndEdit.AddListener(OnValueInputEndEdit);
minInputField?.onEndEdit.AddListener(OnMinInputEndEdit);
maxInputField?.onEndEdit.AddListener(OnMaxInputEndEdit);
SyncAllInputFields();
}