Search Unity

  1. Welcome to the Unity Forums! Please take the time to read our Code of Conduct to familiarize yourself with the forum rules and how to post constructively.

Time In While Loop Not Working

Discussion in 'Scripting' started by darandomturtle786, Aug 5, 2022 at 9:19 PM.

  1. darandomturtle786


    Apr 2, 2020
    This loop should make the slider value increade over time(in this case 3 seconds) however it basically jumps to 3 very fast. idk whats wrong

    Code (CSharp):
    1.     private IEnumerator LerpSlider(Slider slider, float time)
    2.     {
    3.         float timeScale = 0;
    4.         float speed = 1/time;
    5.         while (timeScale < 1)
    6.         {
    7.             timeScale += Time.deltaTime * speed;
    8.             slider.value = Mathf.Lerp(0f, 3f, timeScale);
    9.             Debug.Log(slider.value);
    10.         }
    11.         slider.gameObject.SetActive(false);
    12.         yield return null;
    13.     }
  2. RadRedPanda


    May 9, 2018
    While loops won't pause in between iterations, you need to
    yield return null
    inside of the loop for it to wait until the next update.
    Bunny83 likes this.
  3. Kurt-Dekker


    Mar 16, 2013
    Unity locks up solid until you return from your code. Therefore all X iterations of however long it takes to count timeScale up to 1 will occur all in one frame.

    If you had set timeScale to zero, you would have locked Unity up solid and you would have to force-quit.

    You are not the app. Your code is not the app. Unity is the app. Unity is the code. Your code may get called at Unity's convenience and discretion, as long as you follow all the "please call my code" rules.

    Here is some timing diagram help:

    Said another way:
    Last edited: Aug 6, 2022 at 1:40 AM
    Bunny83 likes this.