- Home /
 
 
               Question by 
               Digital-Phantom · Jan 24, 2015 at 02:38 PM · 
                javascriptcolor changecolor.lerpdurationpulse  
              
 
              Unable to Color.Lerp in two directions (Solved)
I'm trying to create a pulsing effect using color.lerp. I can get the colors to change in one direction fine using this cript-
 var startColor : Color;
  var endColor : Color;
  var duration: float = 5; // duration in seconds
  
 5. private var t: float = 0; // lerp control variable
      
  function Update() {
    renderer.material.color = Color.Lerp(startColor, endColor, t);
    if (t < 1){ // while t below the end limit...
 10.     // increment it at the desired rate every update:
      t += Time.deltaTime/duration;
    }
  }
 
 
               But since then I've tried to advance the script so the colors will have a pulse effect. However the colors are just flickering at a very fast rate. What in my script is wrong?
 #pragma strict
 var startColor : Color;
 var endColor : Color;
 var duration: float = 5; // duration in seconds
 var pulselow : boolean = true;
  
 private var t: float = 0; // lerp control variable
      
 function Update()
 {
        if (pulselow == true)
        {
            renderer.material.color = Color.Lerp(startColor, endColor, t);
            if (t < 1)
            {
                t += Time.deltaTime/duration;
                pulselow = false;
            }
     }
     
  else
  
        if (pulselow == false)
        {
            renderer.material.color = Color.Lerp(endColor, startColor, t);
            if (t < 1)
            {
                t += Time.deltaTime/duration;
                pulselow = true;
         }
     }
 }
 
 
               Any suggestions? (make all phrasing easy to understand please....lol)
Thanks
               Comment
              
 
               
               
               Best Answer 
              
 
              Answer by NoseKills · Jan 24, 2015 at 03:13 PM
You never reset t, and you switch pulselow at the wrong time. You switch Lerp direction every time t is under 1, so basically every frame during the first 5 seconds.
  function Update()
  {
     t += Time.deltaTime/duration;
     if (pulselow) // pulselow is true
     {
         renderer.material.color = Color.Lerp(startColor, endColor, t);
     }
     else // no need for another "if". pulselow was not true so it can't be anything else but false
     {
         renderer.material.color = Color.Lerp(endColor, startColor, t);
     }
     if (t > 1)
     {
         t = 0;
         pulselow = !pulselow; // negate pulselow => toggle it from true to flase or false to true
     }
  }
 
              Works perfectly, many thanks.
(I even understood most of what you said...lol)
Again, many thanks, much appreciated !
Your answer