コード例 #1
0
    IEnumerator DecideAction()
    {
        while (true)
        {
            if (stateHandler.IsCurrentState(EnemyStateHandler.States.Patrolling) ||
                stateHandler.IsCurrentState(EnemyStateHandler.States.Chasing))
            {
                if (playerDetection.IsPlayerInView())
                {
                    stateHandler.SwitchToDetectedPlayerState();
                    movement.StopRotating();
                    Vector3 rotateDir = (GameManager.instance.player.transform.position - transform.position).normalized;

                    yield return(StartCoroutine(movement.RotateTowardsDirection(rotateDir)));

                    if (!stateHandler.IsCurrentState(EnemyStateHandler.States.Dead))
                    {
                        yield return(StartCoroutine(playerDetection.CheckIfHeldLineOfSight()));
                    }
                }
                else
                {
                    HandleWaypoint(waypointHandler.GetCurrentWaypoint());
                }
            }
            else if (stateHandler.IsCurrentState(EnemyStateHandler.States.Shooting))
            {
                gunHandler.Shoot();
                transform.forward = (GameManager.instance.player.transform.position - transform.position).normalized;
                if (!playerDetection.IsPlayerInView())
                {
                    stateHandler.SwitchToChasingState();
                }
            }
            else if (stateHandler.IsCurrentState(EnemyStateHandler.States.LookAround))
            {
                if (!movement.isLookingAround)
                {
                    StartCoroutine(movement.LookAroundForPlayer());
                }
            }
            yield return(new WaitForFixedUpdate());
        }
    }