添加了编辑器下的组件立刻更新模式

This commit is contained in:
2026-06-28 20:46:28 +08:00
parent 6c0478dc42
commit c98503239f
3 changed files with 64 additions and 7 deletions
+20 -3
View File
@@ -54,13 +54,30 @@ namespace XericUI.OverrideUI
{
base.OnEnable();
RevalidateStyles();
StyleRefreshManager.Register(this);
ApplyForState(m_CurrentState);
}
#if UNITY_EDITOR
protected override void OnValidate()
{
base.OnValidate();
RevalidateStyles();
ApplyForState(m_CurrentState);
}
#endif
private void RevalidateStyles()
{
m_ColorState?.UnsubscribeAll(OnStyleChanged);
m_TextureState?.UnsubscribeAll(OnStyleChanged);
m_ColorState?.RegisterAll();
m_TextureState?.RegisterAll();
m_ColorState?.SubscribeAll(OnStyleChanged);
m_TextureState?.SubscribeAll(OnStyleChanged);
StyleRefreshManager.Register(this);
ApplyForState(m_CurrentState);
}
protected override void OnDisable()
+17
View File
@@ -56,6 +56,21 @@ namespace XericUI.OverrideUI
ApplyAllStyles();
}
#if UNITY_EDITOR
/// <summary>编辑器下属性变更时即刻刷新(路径从空变为有效等场景)</summary>
protected override void OnValidate()
{
base.OnValidate();
if (!m_AutoRefresh) return;
RegisterIfValid(m_ColorStyle);
RegisterIfValid(m_TextureStyle);
RegisterIfValid(m_MaterialStyle);
ApplyAllStyles();
}
#endif
protected override void OnDisable()
{
UnregisterIfValid(m_ColorStyle);
@@ -70,6 +85,8 @@ namespace XericUI.OverrideUI
if (field == null) return;
// 路径为空说明未在 Inspector 中配置,跳过注册避免空路径查询错误
if (string.IsNullOrEmpty(field.StylePath)) return;
// 先退订再注册,防止 OnValidate 重复调用导致双重订阅
field.Member.OnValueChanged -= OnStyleChanged;
field.Register();
field.Member.OnValueChanged += OnStyleChanged;
}
+27 -4
View File
@@ -74,6 +74,33 @@ namespace XericUI.OverrideUI
{
base.OnEnable();
RevalidateStyles();
StyleRefreshManager.Register(this);
onValueChanged.AddListener(OnToggleValueChanged);
ApplyForState(m_CurrentState);
}
#if UNITY_EDITOR
/// <summary>编辑器下属性变更时即刻刷新(路径从空变为有效等场景)</summary>
protected override void OnValidate()
{
base.OnValidate();
RevalidateStyles();
ApplyForState(m_CurrentState);
}
#endif
/// <summary>重新注册/订阅所有 StyleField(供 OnEnable 和 OnValidate 共用)</summary>
private void RevalidateStyles()
{
// 先退订防止双重订阅
m_ColorState?.UnsubscribeAll(OnStyleChanged);
m_TextureState?.UnsubscribeAll(OnStyleChanged);
m_OnOverrideColor.Member.OnValueChanged -= OnStyleChanged;
m_OnOverrideTexture.Member.OnValueChanged -= OnStyleChanged;
m_CheckmarkStyle.Member.OnValueChanged -= OnStyleChanged;
m_ColorState?.RegisterAll();
m_TextureState?.RegisterAll();
m_ColorState?.SubscribeAll(OnStyleChanged);
@@ -85,10 +112,6 @@ namespace XericUI.OverrideUI
m_OnOverrideTexture.Member.OnValueChanged += OnStyleChanged;
m_CheckmarkStyle?.Register();
m_CheckmarkStyle.Member.OnValueChanged += OnStyleChanged;
StyleRefreshManager.Register(this);
onValueChanged.AddListener(OnToggleValueChanged);
ApplyForState(m_CurrentState);
}
protected override void OnDisable()