So, i’m trying to make a script that basically does this:
When the game/scene starts, the light is very bright and gradually dims down to the desired intensity.
But, it doesn’t work.
Whenever I try to make it “less than”, it doesn’t work, but when I do “greater than” it works, but stops at 4…
I’m really new to Unity, with some knowledge to Javascript, so… help?
#pragma strict
var lt : Light;
function Start ()
{
for (var i : int = 8; i < 0.5; i--)
{
lt.intensity -= 0.5;
yield WaitForSeconds(0.1);
}
}
the for-loop is reducing i by 1 every iteration, but intensity is being reduced by 0.5 each iteration. So if the light intensity is at 8, it makes sense that it will stop at 4. You can change the for-loop to make it look like the original code:
for (var i : int = 8; i >= 0; i--)
{
lt.intensity = i;
yield WaitForSeconds(0.1);
}
This doesn’t reduce intensity by 0.5 though, a float can be used for that:
for (var i : float = lt.intensity; i >= 0; i -= 0.5)
{
lt.intensity = i;
yield WaitForSeconds(0.1);
}
Another solution is to not use a for-loop, instead make a function and pass a timeLength variable for how long you want the transition to take:
function Start ()
{
LerpLightIntensity(lt.intensity, 0, 3); // Fade the current intensity to 0 in 3 seconds
LerpLightIntensity(0, 4, 10); // Fade the intensity from 0 to 4 in 10 seconds
}
function LerpLightIntensity(from : float, to : float, timeLength : float)
{
var elapsed : float = 0f;
while (lt.intensity != to)
{
var lerpTime : float = Mathf.Clamp(elapsed / timeLength, 0f, 1f);
lt.intensity = Mathf.Lerp(from, to, lerpTime);
yield WaitForEndOfFrame();
elapsed += Time.deltaTime;
}
}