CombatHeroGPUAnimtion.cs 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. using System.Collections.Generic;
  2. using GameLogic.Combat.Hero.HeroGPU;
  3. using GameTimeLine.CustomizeTimeLogic;
  4. using GPUECSAnimationBaker.Engine.AnimatorSystem;
  5. using UnityEngine;
  6. namespace GameLogic.Combat.Hero
  7. {
  8. public class CombatHeroGPUAnimtion : HeroAnimtionBasic
  9. {
  10. public GpuEcsAnimatorBehaviour GpuEcsAnimatorBehaviour;
  11. public GPUAnimtion GPUAnimtion;
  12. private GpuEcsAnimationData[] animations;
  13. private HeroGPUAnimtionStateInfo _heroPlayStateInfoBasic;
  14. protected HeroGPUMono _heroGPUMono;
  15. private List<string> _anchorNames = new List<string>();
  16. protected override void ProInit()
  17. {
  18. GpuEcsAnimatorBehaviour =
  19. combatHeroEntity.GameObject.transform.GetComponentInChildren<GpuEcsAnimatorBehaviour>();
  20. animations = GpuEcsAnimatorBehaviour.animations;
  21. _anchorNames = GpuEcsAnimatorBehaviour.anchorNames;
  22. GPUAnimtion = new GPUAnimtion();
  23. GPUAnimtion.Init(GpuEcsAnimatorBehaviour);
  24. _heroPlayStateInfoBasic = new HeroGPUAnimtionStateInfo();
  25. _heroGPUMono = combatHeroEntity.combatHeroGameObject.HeroGPUMono;
  26. }
  27. protected override void ProUpdate(float t)
  28. {
  29. GPUAnimtion.Update();
  30. _heroGPUMono.animtionState = GPUAnimtion.gpuEcsAnimatorShaderData.shaderData;
  31. }
  32. public override void SetSpecialDotMonoFollow(SpecialDotInfo specialDotInfo)
  33. {
  34. if (!specialDotInfo.followSkeleton)
  35. {
  36. return;
  37. }
  38. int index = _anchorNames.IndexOf(specialDotInfo.dotName);
  39. if (index >= 0)
  40. {
  41. GPUAnimtion.GetGPUAnchors(index, out Vector3 pos, out Quaternion unityQuaternion);
  42. specialDotInfo.targetTran.localPosition = pos;
  43. }
  44. }
  45. private int GetAnimtionIndex(string name)
  46. {
  47. for (int i = 0; i < animations.Length; i++)
  48. {
  49. if (animations[i].stateName.Equals(name))
  50. {
  51. return i;
  52. }
  53. }
  54. return -1;
  55. }
  56. private void SetSpeed(float speed)
  57. {
  58. GPUAnimtion.SetSpeed(speed);
  59. }
  60. public override HeroPlayStateInfoBasic Play(string name, float speed = 1)
  61. {
  62. int index = GetAnimtionIndex(name);
  63. if (index < 0)
  64. {
  65. return null;
  66. }
  67. _heroPlayStateInfoBasic.OnSetSpeed = SetSpeed;
  68. AnimatorInfo animatorInfo = new AnimatorInfo()
  69. {
  70. animationID = index,
  71. blendFactor = 0,
  72. speedFactor = speed
  73. };
  74. GPUAnimtion.SetAnimtionIndex(animatorInfo);
  75. return _heroPlayStateInfoBasic;
  76. }
  77. }
  78. }