Working on a script that causes the distance fog end distance to animate subtly from one setting to another when the player collides with a box. I thought I had it working, but it seems to simply pop from one setting to the other, instead of a smooth animation.
#pragma strict
public var timer = 0;
private var lerpTime : float = 14;
private var isLerping:boolean = false;
private var startTime:float;
function Update()
{
if (isLerping)
{
// timer += Time.time;
RenderSettings.fogEndDistance = Mathf.Lerp(85, 600, Time.time/(startTime + lerpTime) );
}
}
function lerpDistanceFog ()
{
startTime = Time.time;
isLerping=true;
}
function OnTriggerEnter (col : Collider)
{
if(col.gameObject.tag == "Player")
{
print ("Distance Fog End Distance is now lerping");
lerpDistanceFog();
}
}
Firstly, I see that as time goes by your Lerp approaches 1.
if Time.time = 1, startTime = 1, lerpTime = 14,
so,
Time.time/(startTime+lerpTime) = 1/15 = 0.06
if Time.time = 1000, startTime = 1000, lerpTime = 14,
so,
Time.time/(startTime+lerpTime) = 1000/1014 = 0.986
So as time gets bigger your Lerp will Snap more quickly.
Make a timer with,
lerpTimer += Time.deltaTime;
then use t = lerpTimer/lerpTime.
public var lerpTimer : float = 0.0;
private var lerpTime : float = 14.0;
private var isLerping : boolean = false;
function Update()
{
if (isLerping)
{
lerpTimer += Time.deltaTime;
RenderSettings.fogEndDistance = Mathf.Lerp(85, 600, lerpTimer/lerpTime) );
if ((lerpTimer/lerpTime) >= 1)
{
isLerping = false;
lerpTimer = 0;
}
}
}
function lerpDistanceFog ()
{
lerpTimer = 0;
isLerping = true;
}
function OnTriggerEnter (col : Collider)
{
if(col.gameObject.tag == "Player")
{
print ("Distance Fog End Distance is now lerping");
lerpDistanceFog();
}
}
Also try adding a re-trigger delay, such that once the fogdistance change is triggered the Lerp is allowed to complete before the trigger can be used again.