This commit is contained in:
陈思海 2025-12-10 11:16:55 +08:00
parent 574ba0df7d
commit 6061b51dbd
2 changed files with 21 additions and 30 deletions

View File

@ -36,7 +36,6 @@ public class UXButton : UXSelectable, IButton, IPointerClickHandler, ISubmitHand
private bool m_IsDown;
private bool m_HasExitedWhileDown;
private bool _mTogSelected;
private Animator _animator;
private Coroutine _resetRoutine;
private WaitForSeconds _waitFadeDuration;
@ -47,21 +46,10 @@ public class UXButton : UXSelectable, IButton, IPointerClickHandler, ISubmitHand
private bool m_IsNavFocused = false;
private static readonly Dictionary<string, int> _animTriggerCache = new()
{
{ "Normal", Animator.StringToHash("Normal") },
{ "Highlighted", Animator.StringToHash("Highlighted") },
{ "Pressed", Animator.StringToHash("Pressed") },
{ "Selected", Animator.StringToHash("Selected") },
{ "Disabled", Animator.StringToHash("Disabled") },
};
#endregion
#region Properties
private Animator Animator => _animator ? _animator : _animator = GetComponent<Animator>();
public bool Selected
{
get => _mTogSelected;
@ -538,22 +526,6 @@ public class UXButton : UXSelectable, IButton, IPointerClickHandler, ISubmitHand
base.ApplyTransition(m_ChildTransitions[i], state, instant);
}
/// <summary>
/// 覆盖 PlayAnimation使用 UXButton 的 Animator 与 trigger 缓存(保持原逻辑)
/// </summary>
/// <param name="trigger"></param>
protected override void PlayAnimation(string trigger)
{
if (!Animator || !Animator.isActiveAndEnabled || string.IsNullOrEmpty(trigger))
return;
foreach (int id in _animTriggerCache.Values)
Animator.ResetTrigger(id);
if (_animTriggerCache.TryGetValue(trigger, out int hash))
Animator.SetTrigger(hash);
}
private void PlayAudio(AudioClip clip)
{
if (clip && UXComponentExtensionsHelper.AudioHelper != null)
@ -562,7 +534,6 @@ public class UXButton : UXSelectable, IButton, IPointerClickHandler, ISubmitHand
#endregion
public void Focus()
{
if (!IsInteractable())

View File

@ -58,6 +58,19 @@ namespace UnityEngine.UI
protected int m_CurrentIndex = -1;
protected bool m_EnableCalled = false;
private Animator _animator;
public Animator Animator => _animator ? _animator : _animator = GetComponent<Animator>();
public static readonly Dictionary<string, int> _animTriggerCache = new()
{
{ "Normal", Animator.StringToHash("Normal") },
{ "Highlighted", Animator.StringToHash("Highlighted") },
{ "Pressed", Animator.StringToHash("Pressed") },
{ "Selected", Animator.StringToHash("Selected") },
{ "Disabled", Animator.StringToHash("Disabled") },
};
public Graphic targetGraphic
{
get { return m_MainTransition.targetGraphic; }
@ -644,7 +657,14 @@ namespace UnityEngine.UI
/// <param name="trigger"></param>
protected virtual void PlayAnimation(string trigger)
{
// base does nothing — subclasses (e.g. UXButton) can override to use Animator.
if (!Animator || !Animator.isActiveAndEnabled || string.IsNullOrEmpty(trigger) || !gameObject.activeInHierarchy)
return;
foreach (int id in _animTriggerCache.Values)
Animator.ResetTrigger(id);
if (_animTriggerCache.TryGetValue(trigger, out int hash))
Animator.SetTrigger(hash);
}
#endregion