CombatHeroMoveState.cs 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. using UnityEngine;
  2. using UnityEngine.AI;
  3. namespace GameLogic.Combat.Hero.State
  4. {
  5. public class CombatHeroMoveState : CombatHeroStateBasic
  6. {
  7. protected Vector3 lasetTaregtPoint;
  8. protected Vector3 lastMovePoint;
  9. public CombatHeroMoveState(CombatHeroEntity combatHeroEntity) : base(combatHeroEntity)
  10. {
  11. }
  12. protected override void ProEnter()
  13. {
  14. lasetTaregtPoint = Vector3.zero;
  15. combatHeroEntity.combatHeroAnimtion.Play("run");
  16. combatHeroEntity.CombatAIBasic.NavMeshAgent.updateRotation = false;
  17. combatHeroEntity.CombatAIBasic.NavMeshAgent.isStopped = true;
  18. // SetNewPath();
  19. }
  20. protected override void ProExit()
  21. {
  22. combatHeroEntity.CombatAIBasic.NavMeshAgent.isStopped = true;
  23. combatHeroEntity.CombatAIBasic.NavMeshAgent.velocity = Vector3.zero;
  24. // combatHeroEntity.CombatAIBasic.NavMeshAgent.acceleration = 0;
  25. }
  26. protected void SetNewPath(Vector3 taregtPos)
  27. {
  28. lastMovePoint = combatHeroEntity.dotPos;
  29. lasetTaregtPoint = taregtPos;
  30. combatHeroEntity.CombatAIBasic.NavMeshAgent.isStopped = false;
  31. // combatHeroEntity.CombatAIBasic.NavMeshAgent.acceleration = 8;
  32. combatHeroEntity.CombatAIBasic.NavMeshAgent.SetDestination(taregtPos);
  33. }
  34. protected override void ProUpdate(float t)
  35. {
  36. if (combatHeroEntity.CombatAIBasic.currFocusTarget == null)
  37. {
  38. combatHeroEntity.CombatAIBasic.ChangeState(CombatHeroStateType.idle);
  39. return;
  40. }
  41. Vector3 targetPos = combatHeroEntity.CombatAIBasic.currFocusTarget.dotPos;
  42. Vector3 myPos = combatHeroEntity.dotPos;
  43. if (Vector3.SqrMagnitude(targetPos - myPos) >
  44. combatHeroEntity.CurrCombatHeroInfo.maxDisTo)
  45. {
  46. if (Vector3.SqrMagnitude(lasetTaregtPoint - targetPos) > 1)
  47. {
  48. SetNewPath(targetPos);
  49. }
  50. }
  51. else
  52. {
  53. combatHeroEntity.CombatAIBasic.ChangeState(CombatHeroStateType.idle);
  54. return;
  55. }
  56. if (!combatHeroEntity.CombatAIBasic.NavMeshAgent.isStopped)
  57. {
  58. Vector3 nextPos = combatHeroEntity.CombatAIBasic.NavMeshAgent.nextPosition;
  59. Vector3 p = nextPos - lastMovePoint;
  60. lastMovePoint= myPos;
  61. if (p.sqrMagnitude > 0.00001)
  62. {
  63. combatHeroEntity.combatHeroGameObject.rotation= Quaternion.Lerp(combatHeroEntity.combatHeroGameObject.rotation, Quaternion.LookRotation(p.normalized), 0.5f);
  64. }
  65. }
  66. }
  67. }
  68. }