CombatHeroAnimtion.cs 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. using System;
  2. using System.Collections.Generic;
  3. using Animancer;
  4. using Animancer.TransitionLibraries;
  5. using Core.Triiger;
  6. using Fort23.UTool;
  7. using UnityEngine;
  8. using UnityEngine.AI;
  9. using Utility;
  10. namespace GameLogic.Combat.Hero
  11. {
  12. public class CombatHeroAnimtion : IDisposable
  13. {
  14. public AnimancerComponent AnimancerComponent;
  15. protected Map<string, TransitionAsset> _transitionMap = new Map<string, TransitionAsset>();
  16. private CombatHeroEntity combatHeroEntity;
  17. public void Init(AnimancerComponent animancer, CombatHeroEntity combatHeroEntity)
  18. {
  19. AnimancerComponent = animancer;
  20. AnimancerComponent.gameObject.OnAnimatorMove(OnAnimatorMove);
  21. this.combatHeroEntity = combatHeroEntity;
  22. if (AnimancerComponent != null)
  23. {
  24. // AnimancerComponent.GetAnimationClips();
  25. // List<AnimationClip> results = new List<AnimationClip>();
  26. // AnimancerComponent.Transitions.GetAnimationClips(results);
  27. int max = AnimancerComponent.Transitions.Library.Count;
  28. for (int i = 0; i < max; i++)
  29. {
  30. if (AnimancerComponent.Transitions.Library.TryGetTransition(i,
  31. out TransitionModifierGroup transition))
  32. {
  33. TransitionAsset clipTransition2 = transition.Transition as TransitionAsset;
  34. _transitionMap[clipTransition2.name] = clipTransition2;
  35. }
  36. }
  37. }
  38. }
  39. protected void OnAnimatorMove()
  40. {
  41. combatHeroEntity.CombatAIBasic.NavMeshAgent.Raycast(AnimancerComponent.Animator.rootPosition,
  42. out NavMeshHit hit);
  43. if (!hit.hit)
  44. {
  45. combatHeroEntity.combatHeroGameObject.SetPosition(AnimancerComponent.Animator.rootPosition);
  46. }
  47. }
  48. public void Play(string name, float speed = 1)
  49. {
  50. if (!_transitionMap.TryGetValue(name, out TransitionAsset clipTransition))
  51. {
  52. LogTool.Log("没有找到要播放的动画" + name);
  53. return;
  54. }
  55. clipTransition.Speed = speed;
  56. // clipTransition. = isLoop;
  57. AnimancerComponent.Play(clipTransition);
  58. }
  59. public void Dispose()
  60. {
  61. _transitionMap.Clear();
  62. AnimancerComponent = null;
  63. }
  64. }
  65. }