// Update is called once per frame void Update() { if (m_Path == null) { return; } float distToPlayer = Vector3.Distance(transform.position, m_PlayerPos.position); if (m_CurrentWayPoint >= m_Path.vectorPath.Count) { // requeue if not in attack range if (m_Comb != null) { if (distToPlayer > m_Comb.GetAttackRange()) { FindNewPath(); } } return; } //update path every 30 frames if (Time.frameCount % 30 == 0) { FindNewPath(); } Vector3 moveDir = (m_Path.vectorPath[m_CurrentWayPoint] - transform.position).normalized; moveDir *= m_MoveSpeed; m_CharController.SimpleMove(moveDir); if (Vector3.Distance(transform.position, m_Path.vectorPath[m_CurrentWayPoint]) <= m_NextWayPointDist) { m_CurrentWayPoint++; } //also check for range if (m_Comb != null) { if (distToPlayer < m_Comb.GetAttackRange()) { //destination reached m_CurrentWayPoint = m_Path.vectorPath.Count; } } }