- 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 !