void FixedUpdate()
    {
        // Si por alguna razon la bateria no se carga y esta llega a 0, el dron se detiene y no realiza
        // ya ninguna accion.
        if (sensor.Bateria() <= 0)
        {
            return;
        }

        // Una vez que el dron detecta un nivel de bateria bajo, 30 para nuestro caso, inicia el retorno hacia la base
        // de carga, usando la funcion auxiliar de Lerp que se encarga de hacer una interpolacion entre un vector
        // que representa una posicion inicial, la ubicacion del dron para nuestro caso, y otro vector que represente
        // la posicion final, la ubicacion de la base de carga para nosotros. Gracias a esto, Lerp realiza movimientos
        // suavizados para que no parezca que el dron se teletransporta.
        // Hacer uso de este metodo es valido ya que desde un principio el dron tiene conocimiento de donde se encuentra
        // su base de carga.
        if (sensor.Bateria() <= 50)
        {
            float distCovered = (Time.time - startTime) * speed;
            float fracJourney = distCovered / journeyLength;
            transform.position = Vector3.Lerp(sensor.Ubicacion(), sensor.UbicacionBase(), fracJourney);
            Debug.Log("Estoy atorado aqui");
        }

        percepcionActual = PercibirMundo();
        estadoActual     = TablaDeTransicion(estadoActual, percepcionActual);
        AplicarEstado(estadoActual);
    }
    void FixedUpdate()
    {
        if (sensor.Bateria() <= 0)
        {
            return;
        }

        percepcionActual = PercibirMundo();
        estadoActual     = TablaDeTransicion(estadoActual, percepcionActual);
        Debug.Log("-> " + estadoActual + "  -  " + percepcionActual);
        AplicarEstado(estadoActual);
    }
    void FixedUpdate()
    {
        if (sensor.Bateria() <= 0)
        {
            return;
        }

        if (sensor.CercaDePared())
        {
            actuador.Flotar();
            actuador.Detener();
        }
        else
        {
            actuador.Flotar();
            actuador.Adelante();
        }
    }
    /**
     * Metodo que se llama cada frame.
     * */
    void FixedUpdate()
    {
        float bateri = sensor.Bateria();

        if (bateri <= 0)
        {
            Debug.Log("Bateria murio");
            return;
        }
        if (bateri <= 450 && haciaDonde)
        {
            cambiaVista();                           //Si la bateria llega a la mitad, entonces cambia su objetivo a la base de carga
        }
        actuador.Detener();
        diferencias = playerObject.position - transform.position; //Obtiene vector de diferencia entre nuestra posicion y nuestro objetivo.
        if (sensor.TocandoPared())
        {
            Debug.Log("Choco con pared");
        }
        seguimientoCiego(diferencias);
        actuador.Flotar();
    }
Ejemplo n.º 5
0
    // Update y FixedUpdate son similares en uso, pero por regla general se recomienda usar
    // FixedUpdate para calcular elementos físicos como el uso de Rigidbody
    void FixedUpdate()
    {
        // El agente no realiza ninguna acción si no tiene batería
        if (sensor.Bateria() <= 0)
        {
            return;
        }

        // A continuación se muestran ejemplos de uso de actuadores y sensores
        // para ser utilizados de manera manual (por una persona):

        if (Input.GetKey(KeyCode.I))
        {
            actuador.Ascender();
        }
        if (Input.GetKey(KeyCode.K))
        {
            actuador.Descender();
        }
        if (!Input.GetKey(KeyCode.I) && !Input.GetKey(KeyCode.K))
        {
            actuador.Flotar();
        }

        if (Input.GetAxis("Vertical") > 0)
        {
            actuador.Adelante();
        }
        if (Input.GetAxis("Vertical") < 0)
        {
            actuador.Atras();
        }

        if (Input.GetKey(KeyCode.J))
        {
            actuador.GirarIzquierda();
        }
        if (Input.GetKey(KeyCode.L))
        {
            actuador.GirarDerecha();
        }

        if (Input.GetAxis("Horizontal") > 0)
        {
            actuador.Derecha();
        }
        if (Input.GetAxis("Horizontal") < 0)
        {
            actuador.Izquierda();
        }


        if (sensor.TocandoBasura())
        {
            Debug.Log("Tocando basura!");
            actuador.Limpiar(sensor.GetBasura());
        }
        if (sensor.TocandoPared())
        {
            Debug.Log("Tocando pared!");
        }

        if (sensor.CercaDeBasura())
        {
            Debug.Log("Cerca de una basura!");
        }
        if (sensor.CercaDePared())
        {
            Debug.Log("Cerca de una pared!");
        }

        if (sensor.FrenteAPared())
        {
            Debug.Log("Frente a pared!");
        }


        if (Input.GetKey(KeyCode.F))
        {
            actuador.Detener();
        }
        if (Input.GetKey(KeyCode.G))
        {
            Debug.Log(sensor.Ubicacion());
        }
    }