- Home /
How can i pause gradually from timeScale 1.0 to 0.0 over a second?
Hello,
Noob here. I want to smoothly pause the game after pressing Esc. I tried Mathf.Lerp with no success. I assume it's tied to the fact that the timeScale updates only for a frame on pressing Esc. So, i want the timeScale to go from 1.0f after pressing Esc and decrease smoothly over a second to 0.0f during which i also move the camera a bit.
This is what i have attached to the Camera:
 bool CanPause;
 float smooth = 1;
     void Start()
         {
             Time.timeScale = 1;
         }
     void Update()
         {
             if (Input.GetButtonDown("Cancel"))
             {
                 if (CanPause)
                 {
                     smooth -= smooth * Time.deltaTime;
                     Time.timeScale = smooth;
                     CanPause = false;
                 }
                 else
                 {
                     Time.timeScale = 1;
                     CanPause = true;
                 }
             }
 
Also I was getting some out of range values when experimenting with MathfLerp and tried the Mathf.Clamp to keep them between 1.0 and 0.0 to no avail. Please help!
Answer by chelupars · Jul 20, 2015 at 01:18 PM
Thanks to robertbu for answering a very similar topic. Modified the original a little and made it feel hackish but it works! Here is the answer:
  IEnumerator ScaleTime(float start, float end, float time)     //not in Start or Update
             {
                 float lastTime = Time.realtimeSinceStartup;
                 float timer = 0.0f;
          
                 while (timer < time)
                 {
                     Time.timeScale = Mathf.Lerp (start, end, timer / time);
                     timer += (Time.realtimeSinceStartup - lastTime);
                     lastTime = Time.realtimeSinceStartup;
                     yield return null;
                 }
          
                 Time.timeScale = end;
             }
         
         
         void Update ()            
         {
             if (Input.GetButtonDown("Cancel") && Time.timeScale == 1)
             {
                 StartCoroutine(ScaleTime(1.0f, 0.0f, 1.0f));
                 
             }
             if (Input.GetButtonDown("Cancel") && Time.timeScale == 0)
             {
                 StartCoroutine(ScaleTime(0.0f, 1.0f, 1.0f));
                 
             }
 
Your answer
 
 
             Follow this Question
Related Questions
Orbit camer while paused? 1 Answer
Camera zoom smoothing 1 Answer
How to pause only specific objects/prefabs? 3 Answers
Dramatic Camera effect with all physical gameobjects paused? 0 Answers
 koobas.hobune.stream
koobas.hobune.stream 
                       
                
                       
			     
			 
                