CombatHeroGPUAnimtion.cs 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  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. specialDotInfo.targetTran.localRotation = unityQuaternion;
  44. }
  45. }
  46. private int GetAnimtionIndex(string name)
  47. {
  48. for (int i = 0; i < animations.Length; i++)
  49. {
  50. if (animations[i].stateName.Equals(name))
  51. {
  52. return i;
  53. }
  54. }
  55. return -1;
  56. }
  57. private void SetSpeed(float speed)
  58. {
  59. GPUAnimtion.SetSpeed(speed);
  60. }
  61. public override HeroPlayStateInfoBasic Play(string name, float speed = 1)
  62. {
  63. int index = GetAnimtionIndex(name);
  64. if (index < 0)
  65. {
  66. return null;
  67. }
  68. _heroPlayStateInfoBasic.OnSetSpeed = SetSpeed;
  69. AnimatorInfo animatorInfo = new AnimatorInfo()
  70. {
  71. animationID = index,
  72. blendFactor = 0,
  73. speedFactor = speed
  74. };
  75. GPUAnimtion.SetAnimtionIndex(animatorInfo);
  76. return _heroPlayStateInfoBasic;
  77. }
  78. }
  79. }