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 : HeroAnimtionBasic { public AnimancerComponent AnimancerComponent; protected Map _transitionMap = new Map(); protected override void ProInit() { AnimancerComponent = combatHeroEntity.GameObject.GetComponent(); // AnimancerComponent.gameObject.OnAnimatorMove(OnAnimatorMove); 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() // { // if (AnimancerComponent == null || AnimancerComponent.Animator.velocity.sqrMagnitude < .01f) // { // return; // } // // bool isOk = false; // // // // combatHeroEntity.CombatAIBasic.NavMeshAgent.Raycast(AnimancerComponent.Animator.rootPosition, // out NavMeshHit hit); // if (!hit.hit) // { // combatHeroEntity.combatHeroGameObject.SetPosition(AnimancerComponent.Animator.rootPosition); // } // // } public override HeroPlayStateInfoBasic Play(string name, float speed = 1) { if (!_transitionMap.TryGetValue(name, out TransitionAsset clipTransition)) { // LogTool.Log("没有找到要播放的动画" + name); return null; } // clipTransition.Speed = speed; // clipTransition. = isLoop; AnimancerState animancerState = AnimancerComponent.Play(clipTransition); // AnimancerComponent.Animator.speed = speed; animancerState.Speed = speed; HeroAnimtionStateInfo heroPlayStateInfoBasic = new HeroAnimtionStateInfo(); heroPlayStateInfoBasic.animancerState = animancerState; return heroPlayStateInfoBasic; } public void Dispose() { _transitionMap.Clear(); AnimancerComponent = null; } } }