Timing

From ETC Public Wiki
Jump to: navigation, search

Using Yeild to wait

WaitForSeconds Inherits from YieldInstruction

Suspends the coroutine execution for the given amount of seconds.

WaitForSeconds can only be used with a yield statement in coroutines.

 // Prints 0
 print (Time.time);
 // Waits 5 seconds
 yield WaitForSeconds (5);
 // Prints 5.0
 print (Time.time);


A basic timer

 float timer;
 int waitingTime;
  
 void Update(){
     timer += Time.deltaTime;
     if(timer > waitingTime){
        //Action
        timer = 0;
     }
 }


Delay an action

 var check :boolean =true;
 var i:int =0;
  
 function Update () {
     if(Input.GetKeyDown(KeyCode.A)&&check){
         check = false;
         print("Inside" + i++);
         WaitForIt();
     }
 }
 function WaitForIt(){
     yield WaitForSeconds(2.0f);
     check=true;
 }

Doing something in the future

 function Start()
 {
     //Turn the object blue in 2 seconds
     Invoke("TurnMeBlue", 2);
 }

 function TurnMeBlue()
 {
      renderer.material.color = Color.blue;
 }

OR Repeat too

 var health : float = 100.0;

 function Start()
 {
     InvokeRepeating("Heal", 2, 2);
 }

 function Heal()
 {
     health = Mathf.Clamp(health + 1, 0, 100);
 }


Changing the global time scale

Time.timeScale changes the scale at which the time is passing. This can be used for slow motion effects.

When timeScale is 1.0 the time is passing as fast as realtime. When timeScale is 0.5 the time is passing 2x slower than realtime.

When timeScale is set to zero the game is basically paused if all your functions are frame rate independent.

Except for realtimeSinceStartup, timeScale affects all the time and delta time measuring variables of the Time class.

If you lower timeScale it is recommended to also lower Time.fixedDeltaTime by the same amount.

FixedUpdate functions will not be called when timeScale is set to zero.

 // Toggles the time scale between 1 and 0.7
 // whenever the user hits the Fire1 button.
 
 function Update () {
   if (Input.GetButtonDown ("Fire1")) {
     if (Time.timeScale == 1.0)
         Time.timeScale = 0.7;
     else
         Time.timeScale = 1.0;
     // Adjust fixed delta time according to timescale
     // The fixed delta time will now be 0.02 frames per real-time second
     Time.fixedDeltaTime = 0.02 * Time.timeScale;
   }
 }