CombatHeroAnimtion.cs 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  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. if (AnimancerComponent == null || AnimancerComponent.Animator.velocity.sqrMagnitude < .01f)
  42. {
  43. return;
  44. }
  45. bool isOk = false;
  46. combatHeroEntity.CombatAIBasic.NavMeshAgent.Raycast(AnimancerComponent.Animator.rootPosition,
  47. out NavMeshHit hit);
  48. if (!hit.hit)
  49. {
  50. combatHeroEntity.combatHeroGameObject.SetPosition(AnimancerComponent.Animator.rootPosition);
  51. }
  52. }
  53. public AnimancerState Play(string name, float speed = 1)
  54. {
  55. if (!_transitionMap.TryGetValue(name, out TransitionAsset clipTransition))
  56. {
  57. LogTool.Log("没有找到要播放的动画" + name);
  58. return null;
  59. }
  60. // clipTransition.Speed = speed;
  61. // clipTransition. = isLoop;
  62. AnimancerState animancerState = AnimancerComponent.Play(clipTransition);
  63. // AnimancerComponent.Animator.speed = speed;
  64. animancerState.Speed = speed;
  65. return animancerState;
  66. }
  67. public void Dispose()
  68. {
  69. _transitionMap.Clear();
  70. AnimancerComponent = null;
  71. }
  72. }
  73. }