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(); }
// 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()); } }