using UnityEngine; using UnityEngine.UI; namespace Ichni.UI { /// /// 将装饰性 UI Image 纳入「UI 效果」图形设置。 /// /// 此组件应只挂在使用 UI_ExpandingContours 等可选视觉 Shader 的 Image 上。 /// 关闭设置时仅禁用目标 Image 的绘制,不会停用 GameObject,因此布局与子物体状态不受影响。 /// 目标应为不承载输入的装饰性 Image。 /// /// /// 新增同类 UI 特效时,只需在对应 Image 上添加本组件;无需再在 SettingsManager 中硬编码页面或物体名称。 /// /// [DisallowMultipleComponent] [RequireComponent(typeof(Graphic))] public sealed class UiExpandingContoursEffect : MonoBehaviour { [SerializeField] private Graphic targetGraphic; private void Reset() { targetGraphic = GetComponent(); } private void Awake() { if (targetGraphic == null) { targetGraphic = GetComponent(); } } private void OnEnable() { // 页面首次显示或从隐藏状态恢复时,重新读取已经加载的玩家设置。 bool enableUiEffects = SettingsManager.instance?.settingsSaveData?.enableUiEffects ?? true; ApplyEnabledState(enableUiEffects); } /// /// 设置目标 Image 是否参与绘制。由 SettingsManager 在载入存档、场景切换和玩家切换开关时调用。 /// public void ApplyEnabledState(bool enableUiEffects) { if (targetGraphic == null) { targetGraphic = GetComponent(); } targetGraphic.enabled = enableUiEffects; } } }