IEnumerator Investigating() { suspiciousPosition = player.position; while (true) { guard_motor.facingDirection = suspiciousPosition - _transform.position; guard.speed = 0f; yield return(new WaitForSeconds(1f)); guard.SetDestination(suspiciousPosition); guard.speed = alertSpeed; while ((_transform.position - guard.destination).sqrMagnitude > 2f) { guard_motor.facingDirection = guard.desiredVelocity; yield return(null); } guard.speed = 0f; yield return(new WaitForSeconds(1f)); // This coroutine uses the Navmesh to calculate the nearest waypoint to the bot. // This should really be implemented as a Job, not a coroutine, as the guard's investigate state // could be interrupted. However, the coroutine will only run for 4 frames (the number of waypoints), so it's unlikely to happen. yield return(StartCoroutine(botNav.ClosestWayPoint(guard, transform.position, (res) => { //This is so we don't go backwards on our patrol route botNav.NextPosition(); state = State.Patrol; }))); } }
IEnumerator Investigating() { suspiciousPosition = player.position; while (true) { guard_motor.facingDirection = suspiciousPosition - _transform.position; guard.speed = 0f; yield return(new WaitForSeconds(1f)); guard.SetDestination(suspiciousPosition); guard.speed = alertSpeed; while ((_transform.position - guard.destination).sqrMagnitude > 2f) { guard_motor.facingDirection = guard.desiredVelocity; yield return(null); } guard.speed = 0f; yield return(new WaitForSeconds(1f)); yield return(StartCoroutine(botNav.ClosestWayPoint(guard, transform.position, (res) => { //This is so we don't go backwards on our patrol route botNav.NextPosition(); state = State.Patrol; }))); } }