Files
MinFt/Client/Assets/Scripts/UIExtend/AnimatorWithEffectStateMachine.cs
2026-04-27 12:07:32 +08:00

34 lines
1.2 KiB
C#

using System.Collections.Generic;
using UnityEngine;
namespace UIExtend
{
public class AnimatorWithEffectStateMachine : StateMachineBehaviour
{
[SerializeField] private List<string> effectNames;
private Dictionary<string,GameObject> _effectObjs;
private void SetEffectObjState(Animator animator,bool isActive)
{
if(effectNames is not { Count: > 0 })return;
_effectObjs ??= new Dictionary<string, GameObject>();
foreach (var effectName in effectNames)
{
if(!_effectObjs.TryGetValue(effectName,out var effectObj))
effectObj= animator.gameObject.FindChildGameObject(effectName);
if (!effectObj) continue;
_effectObjs.TryAdd(effectName, effectObj);
effectObj?.SetActive(isActive);
}
}
public override void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
{
SetEffectObjState(animator,true);
}
public override void OnStateExit(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
{
SetEffectObjState(animator,false);
}
}
}