Jump to content
Biarox1166

ANSWERED Ayuda con manejo de tiempo y corutinas

Recommended Posts

int tempValue;  	//temperatura a la cual llegar
int tiempoValue; 	//tiempo en el cual llegar a dicha temperatura (en segundos)

IEnumerator TemperaturaActual(bool aumentar)
{
  int t = 0;
  while (t < tempValue)
  {
    t += 1;
    tempActualText.text = $"Actual \n <size=+18>{t.ToString()}</size>";

    //yield return new WaitForSeconds((1f/(tempValue/tiempoValue)));
    //yield return new WaitForSeconds((tiempoValue / tempValue));
    //yield return new WaitForSeconds((1.5f/(tempValue/tiempoValue))/2);
  }
}

Buenas a todos, hoy traigo una duda que me esta molestando ya hace días y que probablemente tenga una solución simple que no veo jajaja.

Verán tengo una corutina encargada de incrementar el valor de la temperatura actual de un horno. Esta va en aumento hasta llegar a la temperatura previamente marcada por el usuario. El tema es que el usuario además de elegir la temperatura a la cual llegar puede elegir el tiempo en el que desea que llegue(en segundos). Y acá es donde viene mi problema, no logro que si el usuario haya elegido 15 segundos tarde 15 segundos en llegar a X temperatura. Probé de diversas formas y todas o bien lo hacen en mucho menos tiempo, o bien tardan de más. También me ha pasado de que algunas soluciones sirven siempre y cuando sean valores de temperatura y tiempo bajos, en cuanto alguno de los dos aumenta mucho... 

Adjunto la parte de la corutina que creo que es lo que importa, los yield comentados son las distintas formas que busqué de lograr dicho efecto.

Aclaraciones:

*t si o si tiene que ser integer y aumentar de 1 en lo posible.

*tanto el tiempo como la temperatura deben ser valores enteros también.

*Objetivo: Si yo ingreso 500 grados por asi decirlo, y 120 segundos, se debe incrementar t de manera que alcance 500 en dicho tiempo.

Gracias de antemano y saludos!

 

Share this post


Link to post
Share on other sites

Si quieres hacerlo con una corrutina está bastante simple, lo que tienes que hacer es seccionar el valor que se agregara en cada iteración de tiempo (degressStep).

private int m_currentDegress { get; set; }

private IEnumerator ITempTarget(float time, int degress)
{
  m_currentDegress = 0;
  float degressStep = degress / time;
  while(m_currentDegress < degress)
  {
    m_currentDegress += degressStep;
    yield return new WaitForSeconds(1);
  }  
  m_currentDegress = degress;
}

 

Share this post


Link to post
Share on other sites

Hola @francoe1 gracias por responder tan rápido! Te comento tu respuesta me sirve pero no hace algo que necesito y es que el incremento se de a 1. Yo lo que quiero es poder calcular cuanto tiempo tengo que poner de espera en el yield para que con incrementos de 1 llegue a la temperatura indicada en el tiempo indicado. Como podría modificar tu código para que haga eso?

Share this post


Link to post
Share on other sites

Lo que comentas es una regla de tres simples! Mientras que tu curva de temperatura sea lineal tiempo es igual a tiempoPorGrado * GradosTotales

 

Share this post


Link to post
Share on other sites

×
×
  • Create New...