Biarox1166 5 Report post Posted October 21, 2020 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
francoe1 536 Report post Posted October 21, 2020 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
Biarox1166 5 Report post Posted October 21, 2020 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
francoe1 536 Report post Posted October 22, 2020 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
Biarox1166 5 Report post Posted October 22, 2020 Gracias! Share this post Link to post Share on other sites