using System.Collections.Generic; using UnityEngine; namespace UIExtend { public class AnimatorWithEffectStateMachine : StateMachineBehaviour { [SerializeField] private List effectNames; private Dictionary _effectObjs; private void SetEffectObjState(Animator animator,bool isActive) { if(effectNames is not { Count: > 0 })return; _effectObjs ??= new Dictionary(); 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); } } }