// Usar sensores para determinar el tipo de percepción actual Percepcion PercibirMundo() /* * Percepcion percepcionActual = Percepcion.NoFrenteAPared; * if(sensor.FrenteAPared()) * percepcionActual = Percepcion.FrenteAPared; * else * percepcionActual = Percepcion.NoFrenteAPared; * return percepcionActual;*/ { Percepcion percepcionActual = Percepcion.NoFrenteAPared; if (sensor.FrenteAPared()) { Debug.Log("-------> frente pared"); percepcionActual = Percepcion.FrenteAPared; if (sensor.DerechaPared()) { percepcionActual = Percepcion.FrenteDerechaPared; } return(percepcionActual); } if (sensor.DerechaPared()) { Debug.Log("-------> derecha pared"); percepcionActual = Percepcion.DerechaPared; if (sensor.FrenteAPared()) { Debug.Log("-------> derecha pared --- frente"); percepcionActual = Percepcion.FrenteDerechaPared; } return(percepcionActual); } //Debug.Log("LA PERCEPCION NO TOCO NADA"); return(percepcionActual); }
/// <summary> /// Dentro de este metodo se contemplan todas las percepciones que tiene el dron y con base a ellas /// se mueve dentro de la maquina de estados. /// </summary> /// <returns>percepcionActual, la percepcion del mundo que tiene el dron</returns> Percepcion PercibirMundo() { // La percepcion inicial que el dron tiene. Percepcion percepcionActual = Percepcion.NoCercaDePared; if (sensor.CercaDePared()) { percepcionActual = Percepcion.CercaDePared; } if (sensor.FrenteAPared()) { percepcionActual = Percepcion.FrenteAPared; } if (!sensor.FrenteAPared()) { percepcionActual = Percepcion.NoFrenteAPared; } if (!sensor.CercaDePared()) { percepcionActual = Percepcion.NoCercaDePared; } if (sensor.CercaDeObjeto()) { percepcionActual = Percepcion.CercaDeObjeto; } if (sensor.FrenteAObjeto()) { percepcionActual = Percepcion.FrenteAObjeto; } if (sensor.Bateria() < 50) { percepcionActual = Percepcion.BateriaBaja; } if (sensor.TocandoBase()) { percepcionActual = Percepcion.TocandoBase; } return(percepcionActual); }
// 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()); } }