public void OnStay(Enemy enemy) { if (null != enemy.Player) { enemy.Fsm.ChangeState(Enemy.CHASE_STATE); } else { GraphAgent agent = enemy.agent; PatrolPoint point = enemy.GetCurrentPoint(); agent.Destination = point.Position; if (agent.IsReached) { if (point is ObservablePoint && ((ObservablePoint)point).Count > 0) { enemy.Fsm.ChangeState(Enemy.OBSERVE_STATE); } else { enemy.NextPoint(); } } } }
public void OnStay(Enemy enemy) { GraphAgent agent = enemy.agent; if (null != enemy.Player) { agent.moveSpeed = Mathf.Lerp(agent.moveSpeed, enemy.runSpeed, 0.1f); Player player = enemy.Player; Vector2 position = agent.Position; Vector2 target = player.agent.Position; float remainingDistance = Vector2.Distance(position, target); if (remainingDistance >= enemy.agent.radius + player.agent.radius) { agent.Destination = target; } else { agent.Destination = position; } } else { agent.moveSpeed = Mathf.Lerp(agent.moveSpeed, m_MoveSpeed, 0.2f); if (agent.IsReached) { m_ElapsedTime += Time.deltaTime; if (m_ElapsedTime > 2f) { enemy.Fsm.ChangeState(Enemy.PATROL_STATE); } } } }