private IEnumerator GoAlongPathCoroutine() { pathToPlayer = GridPathfinding.instance.ExecutePathfinding(mobRbody.position); Vector3 mobStartingPosition = mobRbody.position; for (int i = 0; i < pathToPlayer.Count; i++) { //Debug.Log("Current destination index: " + i); Vector3 currentDestination = pathToPlayer[i]; mobAEnemy.RotateTowardsVector3Position(currentDestination); float cTime = 0f; while (Vector3.Distance(mobRbody.position, currentDestination) > minimalPathNodeSwitchDistance) { WalkToPosition(currentDestination, mobAEnemy.MovementSpeed); cTime += Time.deltaTime; if (cTime > timeToStuck) { //mob stuck on one node Debug.Log("Mob is stuck -> executing failsafe mechanism."); if (i > 0) { currentDestination = pathToPlayer[i - 1]; } else { currentDestination = mobStartingPosition; } mobAEnemy.RotateTowardsVector3Position(currentDestination); cTime = 0f; } yield return(null); } } //StartCoroutine(GoAlongPathCoroutine()); }
// Update is called once per frame void Update() { DetectPlayerInProximity(); if (!WalkingSuspended) { //mobAEnemy.RotateTowardsVector3Position(mobAIPath.steeringTarget); mobAEnemy.RotateTowardsVector3Position(PlayerCharacter.instance.transform.position); } }