using UnityEngine; using UnityEngine.AI; namespace GameLogic.Combat.Hero.State { public class CombatHeroMoveState : CombatHeroStateBasic { protected Vector3 lasetTaregtPoint; protected Vector3 lastMovePoint; public CombatHeroMoveState(CombatHeroEntity combatHeroEntity) : base(combatHeroEntity) { } protected override void ProEnter() { lasetTaregtPoint = Vector3.zero; combatHeroEntity.combatHeroAnimtion.Play("run"); combatHeroEntity.CombatAIBasic.NavMeshAgent.updateRotation = false; combatHeroEntity.CombatAIBasic.NavMeshAgent.isStopped = true; // SetNewPath(); } protected override void ProExit() { combatHeroEntity.CombatAIBasic.NavMeshAgent.isStopped = true; combatHeroEntity.CombatAIBasic.NavMeshAgent.velocity = Vector3.zero; // combatHeroEntity.CombatAIBasic.NavMeshAgent.acceleration = 0; } protected void SetNewPath(Vector3 taregtPos) { lastMovePoint = combatHeroEntity.dotPos; lasetTaregtPoint = taregtPos; combatHeroEntity.CombatAIBasic.NavMeshAgent.isStopped = false; // combatHeroEntity.CombatAIBasic.NavMeshAgent.acceleration = 8; combatHeroEntity.CombatAIBasic.NavMeshAgent.SetDestination(taregtPos); } protected override void ProUpdate(float t) { if (combatHeroEntity.CombatAIBasic.currFocusTarget == null) { combatHeroEntity.CombatAIBasic.ChangeState(CombatHeroStateType.idle); return; } Vector3 targetPos = combatHeroEntity.CombatAIBasic.currFocusTarget.dotPos; Vector3 myPos = combatHeroEntity.dotPos; if (Vector3.SqrMagnitude(targetPos - myPos) > combatHeroEntity.CurrCombatHeroInfo.maxDisTo) { if (Vector3.SqrMagnitude(lasetTaregtPoint - targetPos) > 1) { SetNewPath(targetPos); } } else { combatHeroEntity.CombatAIBasic.ChangeState(CombatHeroStateType.idle); return; } if (!combatHeroEntity.CombatAIBasic.NavMeshAgent.isStopped) { Vector3 nextPos = combatHeroEntity.CombatAIBasic.NavMeshAgent.nextPosition; Vector3 p = nextPos - lastMovePoint; lastMovePoint= myPos; if (p.sqrMagnitude > 0.00001) { combatHeroEntity.combatHeroGameObject.rotation= Quaternion.Lerp(combatHeroEntity.combatHeroGameObject.rotation, Quaternion.LookRotation(p.normalized), 0.5f); } } } } }