コード例 #1
0
    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;
            })));
        }
    }
コード例 #2
0
    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;
            })));
        }
    }