diff --git a/Assets/FR2_Cache.asset b/Assets/FR2_Cache.asset index cebde01f..bcc7294c 100644 --- a/Assets/FR2_Cache.asset +++ b/Assets/FR2_Cache.asset @@ -1757,10 +1757,10 @@ MonoBehaviour: m_addressable: m_atlas: m_fileSize: 28008 - m_assetChangeTS: 1780691227 - m_fileInfoReadTS: 1780691353 - m_fileWriteTS: 1780691227 - m_cachefileWriteTS: 1780691227 + m_assetChangeTS: 1780992290 + m_fileInfoReadTS: 1780992361 + m_fileWriteTS: 1780992290 + m_cachefileWriteTS: 1780992290 refreshStamp: 3 UseGUIDsList: - guid: cd62869af1bc6534d83427c72b66bb9f @@ -1901,10 +1901,10 @@ MonoBehaviour: m_addressable: m_atlas: m_fileSize: 2570 - m_assetChangeTS: 1780691227 - m_fileInfoReadTS: 1780691353 - m_fileWriteTS: 1780691227 - m_cachefileWriteTS: 1780691227 + m_assetChangeTS: 1780992290 + m_fileInfoReadTS: 1780992361 + m_fileWriteTS: 1780992290 + m_cachefileWriteTS: 1780992290 refreshStamp: 3 UseGUIDsList: - guid: 0000000000000000f000000000000000 @@ -14732,10 +14732,10 @@ MonoBehaviour: m_addressable: m_atlas: m_fileSize: 4590 - m_assetChangeTS: 1780901815 - m_fileInfoReadTS: 1780901823 - m_fileWriteTS: 1780901815 - m_cachefileWriteTS: 1780901815 + m_assetChangeTS: 1780992288 + m_fileInfoReadTS: 1780992361 + m_fileWriteTS: 1780992288 + m_cachefileWriteTS: 1780992288 refreshStamp: 3 UseGUIDsList: - guid: bf2edee5c58d82540a51f03df9d42094 @@ -33686,10 +33686,10 @@ MonoBehaviour: m_addressable: m_atlas: m_fileSize: 4587 - m_assetChangeTS: 1780901815 - m_fileInfoReadTS: 1780901823 - m_fileWriteTS: 1780901815 - m_cachefileWriteTS: 1780901815 + m_assetChangeTS: 1780992289 + m_fileInfoReadTS: 1780992361 + m_fileWriteTS: 1780992288 + m_cachefileWriteTS: 1780992288 refreshStamp: 3 UseGUIDsList: - guid: bf2edee5c58d82540a51f03df9d42094 @@ -58554,15 +58554,15 @@ MonoBehaviour: UseGUIDsList: [] - guid: 836ab6bd424664b3cb74dd0fcb08c039 type: 2 - m_fileInfoHash: 7913.cs + m_fileInfoHash: 9371.cs m_assetbundle: m_addressable: m_atlas: - m_fileSize: 7913 - m_assetChangeTS: 1780681478 - m_fileInfoReadTS: 1780681494 - m_fileWriteTS: 1780681303 - m_cachefileWriteTS: 1780681303 + m_fileSize: 9371 + m_assetChangeTS: 1780992196 + m_fileInfoReadTS: 1780992220 + m_fileWriteTS: 1780992182 + m_cachefileWriteTS: 1780992182 refreshStamp: 3 UseGUIDsList: [] - guid: 836aceb6bf15047ffb768a3f1b73f56a @@ -123480,15 +123480,15 @@ MonoBehaviour: UseGUIDsList: [] - guid: a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2 type: 2 - m_fileInfoHash: 6834.cs + m_fileInfoHash: 7182.cs m_assetbundle: m_addressable: m_atlas: - m_fileSize: 6834 - m_assetChangeTS: 1780681478 - m_fileInfoReadTS: 1780681494 - m_fileWriteTS: 1780681293 - m_cachefileWriteTS: 1780681293 + m_fileSize: 7182 + m_assetChangeTS: 1780992196 + m_fileInfoReadTS: 1780992220 + m_fileWriteTS: 1780992157 + m_cachefileWriteTS: 1780992157 refreshStamp: 3 UseGUIDsList: [] - guid: a7c864691dec8994c87c559c4ee4ec07 @@ -131044,10 +131044,10 @@ MonoBehaviour: m_addressable: m_atlas: m_fileSize: 23881 - m_assetChangeTS: 1780691227 - m_fileInfoReadTS: 1780691353 - m_fileWriteTS: 1780691227 - m_cachefileWriteTS: 1780691227 + m_assetChangeTS: 1780992290 + m_fileInfoReadTS: 1780992361 + m_fileWriteTS: 1780992290 + m_cachefileWriteTS: 1780992290 refreshStamp: 3 UseGUIDsList: - guid: 2ec995e51a6e251468d2a3fd8a686257 @@ -186342,10 +186342,10 @@ MonoBehaviour: m_addressable: m_atlas: m_fileSize: 4597 - m_assetChangeTS: 1780901815 - m_fileInfoReadTS: 1780901823 - m_fileWriteTS: 1780901815 - m_cachefileWriteTS: 1780901815 + m_assetChangeTS: 1780992289 + m_fileInfoReadTS: 1780992361 + m_fileWriteTS: 1780992289 + m_cachefileWriteTS: 1780992289 refreshStamp: 3 UseGUIDsList: - guid: bf2edee5c58d82540a51f03df9d42094 @@ -191345,15 +191345,15 @@ MonoBehaviour: UseGUIDsList: [] - guid: dbe43137b87e24779be3757535fa9984 type: 2 - m_fileInfoHash: 2145.cs + m_fileInfoHash: 2264.cs m_assetbundle: m_addressable: m_atlas: - m_fileSize: 2145 - m_assetChangeTS: 1780681478 - m_fileInfoReadTS: 1780681494 - m_fileWriteTS: 1780681295 - m_cachefileWriteTS: 1780681295 + m_fileSize: 2264 + m_assetChangeTS: 1780992196 + m_fileInfoReadTS: 1780992220 + m_fileWriteTS: 1780992152 + m_cachefileWriteTS: 1780992152 refreshStamp: 3 UseGUIDsList: [] - guid: db15c78579dee4a4db85f392634c8ecc @@ -228726,15 +228726,15 @@ MonoBehaviour: UseGUIDsList: [] - guid: 2e498d1c8094910479dc3e1b768306a4 type: 5 - m_fileInfoHash: 598748.asset + m_fileInfoHash: 58274.asset m_assetbundle: m_addressable: m_atlas: - m_fileSize: 598748 - m_assetChangeTS: 1780901892 - m_fileInfoReadTS: 1780901892 - m_fileWriteTS: 1780901892 - m_cachefileWriteTS: 1780901892 + m_fileSize: 58274 + m_assetChangeTS: 1780992290 + m_fileInfoReadTS: 1780992361 + m_fileWriteTS: 1780992290 + m_cachefileWriteTS: 1780992290 refreshStamp: 3 UseGUIDsList: - guid: fe393ace9b354375a9cb14cdbbc28be4 @@ -250212,15 +250212,15 @@ MonoBehaviour: UseGUIDsList: [] - guid: 9f5915d0f462947f5bec62ea7e118953 type: 2 - m_fileInfoHash: 6542.cs + m_fileInfoHash: 7168.cs m_assetbundle: m_addressable: m_atlas: - m_fileSize: 6542 - m_assetChangeTS: 1780681478 - m_fileInfoReadTS: 1780681494 - m_fileWriteTS: 1780681300 - m_cachefileWriteTS: 1780681300 + m_fileSize: 7168 + m_assetChangeTS: 1780992196 + m_fileInfoReadTS: 1780992220 + m_fileWriteTS: 1780992163 + m_cachefileWriteTS: 1780992163 refreshStamp: 3 UseGUIDsList: [] - guid: 9f59acaa662cd914b90c445b845103c5 @@ -255827,15 +255827,15 @@ MonoBehaviour: UseGUIDsList: [] - guid: ff19cfc4963444c2e8aa109adef5c68d type: 2 - m_fileInfoHash: 3831.cs + m_fileInfoHash: 4318.cs m_assetbundle: m_addressable: m_atlas: - m_fileSize: 3831 - m_assetChangeTS: 1780679004 - m_fileInfoReadTS: 1780679020 - m_fileWriteTS: 1780678988 - m_cachefileWriteTS: 1780678988 + m_fileSize: 4318 + m_assetChangeTS: 1780992196 + m_fileInfoReadTS: 1780992220 + m_fileWriteTS: 1780992146 + m_cachefileWriteTS: 1780992146 refreshStamp: 3 UseGUIDsList: [] - guid: ff5907e1c7f949efb4399632c6804206 diff --git a/Assets/Scripts/DynamicUI/DynamicUIElements/Simple/DynamicUIBaseColorPicker.cs b/Assets/Scripts/DynamicUI/DynamicUIElements/Simple/DynamicUIBaseColorPicker.cs index ce4929fb..774b7e1c 100644 --- a/Assets/Scripts/DynamicUI/DynamicUIElements/Simple/DynamicUIBaseColorPicker.cs +++ b/Assets/Scripts/DynamicUI/DynamicUIElements/Simple/DynamicUIBaseColorPicker.cs @@ -29,6 +29,16 @@ namespace Ichni.Editor public override void Initialize(IBaseElement baseElement, string title, string parameterName) { + // [对象池安全] 重置可交互状态 + if (sliderR != null) sliderR.interactable = true; + if (sliderG != null) sliderG.interactable = true; + if (sliderB != null) sliderB.interactable = true; + if (sliderA != null) sliderA.interactable = true; + if (inputFieldBaseR != null) inputFieldBaseR.interactable = true; + if (inputFieldBaseG != null) inputFieldBaseG.interactable = true; + if (inputFieldBaseB != null) inputFieldBaseB.interactable = true; + if (inputFieldBaseA != null) inputFieldBaseA.interactable = true; + base.Initialize(baseElement, title, parameterName); Color baseColor = (Color)connectedBaseElement.GetType().GetField(parameterName).GetValue(connectedBaseElement); diff --git a/Assets/Scripts/DynamicUI/DynamicUIElements/Simple/DynamicUIElement.cs b/Assets/Scripts/DynamicUI/DynamicUIElements/Simple/DynamicUIElement.cs index 5a694e78..d9bc43ee 100644 --- a/Assets/Scripts/DynamicUI/DynamicUIElements/Simple/DynamicUIElement.cs +++ b/Assets/Scripts/DynamicUI/DynamicUIElements/Simple/DynamicUIElement.cs @@ -31,10 +31,19 @@ namespace Ichni.Editor public virtual void Initialize(IBaseElement baseElement, string title, string parameterName) { if (canvasGroup == null) canvasGroup = gameObject.AddComponent(); + + // [对象池安全] 重置 CanvasGroup 状态,防止上次 EnabledIf 设置的禁用状态泄漏到新的元素实例 + canvasGroup.interactable = true; + canvasGroup.alpha = 1f; + canvasGroup.blocksRaycasts = true; + this.connectedBaseElement = baseElement; this.parameterName = parameterName; if (title != string.Empty) { + // [对象池安全] 确保标题 GameObject 处于激活状态, + // 防止上次以空标题使用时 SetActive(false) 的状态泄漏 + this.title.gameObject.SetActive(true); this.title.text = title; } else diff --git a/Assets/Scripts/DynamicUI/DynamicUIElements/Simple/DynamicUIEmissionColorPicker.cs b/Assets/Scripts/DynamicUI/DynamicUIElements/Simple/DynamicUIEmissionColorPicker.cs index 85d5779a..abdf6a6f 100644 --- a/Assets/Scripts/DynamicUI/DynamicUIElements/Simple/DynamicUIEmissionColorPicker.cs +++ b/Assets/Scripts/DynamicUI/DynamicUIElements/Simple/DynamicUIEmissionColorPicker.cs @@ -29,6 +29,29 @@ namespace Ichni.Editor public void Initialize(IBaseElement baseElement, string title, string emissionEnabledName, string colorParameterName, string emissionIntensityName) { + // [对象池安全] 重置可交互状态 + if (toggleEnableEmission != null) toggleEnableEmission.interactable = true; + if (sliderR != null) sliderR.interactable = true; + if (sliderG != null) sliderG.interactable = true; + if (sliderB != null) sliderB.interactable = true; + if (inputFieldEmissionR != null) inputFieldEmissionR.interactable = true; + if (inputFieldEmissionG != null) inputFieldEmissionG.interactable = true; + if (inputFieldEmissionB != null) inputFieldEmissionB.interactable = true; + if (inputFieldEmissionI != null) inputFieldEmissionI.interactable = true; + + // [对象池安全] 清除上次使用残留的监听器 + toggleEnableEmission.onValueChanged.RemoveAllListeners(); + sliderR.onValueChanged.RemoveListener(SliderChange); + sliderG.onValueChanged.RemoveListener(SliderChange); + sliderB.onValueChanged.RemoveListener(SliderChange); + inputFieldEmissionR.onEndEdit.RemoveAllListeners(); + inputFieldEmissionG.onEndEdit.RemoveAllListeners(); + inputFieldEmissionB.onEndEdit.RemoveAllListeners(); + inputFieldEmissionI.onEndEdit.RemoveAllListeners(); + + // [对象池安全] 确保 Toggle GameObject 处于激活状态(可能上次被隐藏过) + toggleEnableEmission.gameObject.SetActive(true); + base.Initialize(baseElement, title, colorParameterName); canDisableEmission = emissionEnabledName != "NULL"; //如果对应的EmissionColor强制开启,那么其enabledName为"NULL",不需要显示Toggle diff --git a/Assets/Scripts/DynamicUI/DynamicUIElements/Simple/DynamicUISlider.cs b/Assets/Scripts/DynamicUI/DynamicUIElements/Simple/DynamicUISlider.cs index cbf6e456..06334d27 100644 --- a/Assets/Scripts/DynamicUI/DynamicUIElements/Simple/DynamicUISlider.cs +++ b/Assets/Scripts/DynamicUI/DynamicUIElements/Simple/DynamicUISlider.cs @@ -28,6 +28,12 @@ namespace Ichni.Editor public void Initialize(IBaseElement baseElement, string title, string parameterName, float min, float max, bool wholeNumbers = false) { + // [对象池安全] 重置可交互状态 + if (slider != null) slider.interactable = true; + if (valueInputField != null) valueInputField.interactable = true; + if (minInputField != null) minInputField.interactable = true; + if (maxInputField != null) maxInputField.interactable = true; + slider.minValue = min; slider.maxValue = max; slider.wholeNumbers = wholeNumbers; diff --git a/Assets/Scripts/DynamicUI/DynamicUIElements/Simple/DynamicUIToggle.cs b/Assets/Scripts/DynamicUI/DynamicUIElements/Simple/DynamicUIToggle.cs index 05f076c2..7352f53a 100644 --- a/Assets/Scripts/DynamicUI/DynamicUIElements/Simple/DynamicUIToggle.cs +++ b/Assets/Scripts/DynamicUI/DynamicUIElements/Simple/DynamicUIToggle.cs @@ -15,6 +15,9 @@ namespace Ichni.Editor public override void Initialize(IBaseElement baseElement, string title, string parameterName) { + // [对象池安全] 重置可交互状态 + if (toggle != null) toggle.interactable = true; + // [对象池安全] 精准解绑业务代理,不动预制体原生的展示事件! toggle.onValueChanged.RemoveListener(OnToggleValueChanged); customAction = null;