using System; using System.Collections.Generic; using Animancer; using Animancer.TransitionLibraries; using Core.Triiger; using Fort23.UTool; using UnityEngine; using UnityEngine.AI; using Utility; namespace GameLogic.Combat.Hero { public class CombatHeroAnimtion : IDisposable { public AnimancerComponent AnimancerComponent; protected Map _transitionMap = new Map(); private CombatHeroEntity combatHeroEntity; public void Init(AnimancerComponent animancer, CombatHeroEntity combatHeroEntity) { AnimancerComponent = animancer; AnimancerComponent.gameObject.OnAnimatorMove(OnAnimatorMove); this.combatHeroEntity = combatHeroEntity; if (AnimancerComponent != null) { // AnimancerComponent.GetAnimationClips(); // List results = new List(); // AnimancerComponent.Transitions.GetAnimationClips(results); int max = AnimancerComponent.Transitions.Library.Count; for (int i = 0; i < max; i++) { if (AnimancerComponent.Transitions.Library.TryGetTransition(i, out TransitionModifierGroup transition)) { TransitionAsset clipTransition2 = transition.Transition as TransitionAsset; _transitionMap[clipTransition2.name] = clipTransition2; } } } } protected void OnAnimatorMove() { combatHeroEntity.CombatAIBasic.NavMeshAgent.Raycast(AnimancerComponent.Animator.rootPosition, out NavMeshHit hit); if (!hit.hit) { combatHeroEntity.combatHeroGameObject.SetPosition(AnimancerComponent.Animator.rootPosition); } } public void Play(string name, float speed = 1) { if (!_transitionMap.TryGetValue(name, out TransitionAsset clipTransition)) { LogTool.Log("没有找到要播放的动画" + name); return; } clipTransition.Speed = speed; // clipTransition. = isLoop; AnimancerComponent.Play(clipTransition); } public void Dispose() { _transitionMap.Clear(); AnimancerComponent = null; } } }