Ejemplo n.º 1
0
    public void EncontrarObjetivosVisibles(DireccionCono direccion)
    {
        direccionVision = ObtenerVectorDireccional(direccion);
        objetivosEnRangoNoVisibles.Clear();
        objetivosVisibles.Clear();
        //Obtengo todas las colisiones que se dieron dentro del radio.
        Collider2D[] objetivosEnRadio = Physics2D.OverlapCircleAll(transform.position, radio, objetivos);

        //Recorro el array con todas las colisiones.
        for (int i = 0; i < objetivosEnRadio.Length; i++)
        {
            //Obtengo el vector en direccion a ese objetivo normalizado.
            Transform objetivo            = objetivosEnRadio[i].transform;
            Vector2   direccionAlObjetivo = (objetivo.position - transform.position).normalized;

            //Verifico si esta dentro del ángulo de mi cono de vision en la direccion determinada.
            if (Vector2.Angle(direccionVision, direccionAlObjetivo) < angulo / 2)
            {
                float distanciaAlObjetivo = Vector2.Distance(transform.position, objetivo.position);
                if (!Physics2D.Raycast(transform.position, direccionAlObjetivo, distanciaAlObjetivo, obstaculos))
                {
                    objetivosVisibles.Add(objetivo);
                }
                else
                {
                    objetivosEnRangoNoVisibles.Add(objetivo);
                }
            }
        }
    }
Ejemplo n.º 2
0
    /// <summary>
    /// Obtengo el vector direccional para encarar el cono.
    /// Publico para pruebas GUI.
    /// </summary>
    /// <param name="direccion"></param>
    /// <returns></returns>
    public Vector2 ObtenerVectorDireccional(DireccionCono direccion)
    {
        switch (direccion)
        {
        case DireccionCono.Arriba:
            return(Vector2.up);

        case DireccionCono.Abajo:
            return(Vector2.down);

        case DireccionCono.Izquierda:
            return(Vector2.left);

        case DireccionCono.Derecha:
            return(Vector2.right);

        default:
            Debug.LogError("Direccion para el cono de vision invalida.");
            return(Vector2.zero);
        }
    }