12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- 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<string, TransitionAsset> _transitionMap = new Map<string, TransitionAsset>();
- 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<AnimationClip> results = new List<AnimationClip>();
- // 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 AnimancerState 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;
- return animancerState;
- }
- public void Dispose()
- {
- _transitionMap.Clear();
- AnimancerComponent = null;
- }
- }
- }
|