- Home /
Lerping takes 10 x longer than it should
Hi all, I've written a generic lerp function for use in my project, however I've noticed some odd behaviour. The time taken to lerp seems to be 10x longer than the value I am parsing to the function in seconds. If I divide seconds by 10 I get an accurate timing for the lerp. Can someone explain to me why this is happening?
//INITIALISATION CODE
function Start () {
GlobalFunctions.Lerp(transform, transform.position, Vector3(0, 0, 10), 10);
}
//STATIC FUNCTION IN ANOTHER SCRIPT
static function Lerp (object: Transform, startPos: Vector3, endPos: Vector3, seconds: float)
{
//seconds = seconds / 10; ---- BY ENABLING THIS THE FUNCTION WORKS AS EXPECTED
var startTime = Time.time;
var per: float = 0.0;
var timeSinceStart: float = 0.0;
var zoomTime: float = 0.0;
while (object.position != endPos)
{
Debug.Log(timeSinceStart);
timeSinceStart = Time.time - startTime;
per = timeSinceStart / seconds;
object.position = Vector3.Lerp(startPos, endPos, per);
yield;
}
}
Answer by Jessespike · Sep 29, 2015 at 03:49 PM
Ahh, I'm not sure what you mean by it's 10x longer than it should be. This example lasts 10 seconds as it should. You mean, you want it to last 1 second? Why not change the seconds var from 10 to 1?
No I mean that if I set it to 10 it will lerp over 100 seconds
I just tried it, I set it to 10 and it lasted 10 seconds. Is your timeScale set to 1? (Edit->Project Settings->Time)
That's it. $$anonymous$$y time scale was set to 0.1 That makes sense :-) Thanks for the help
So as an addition to this I've added a handler to ignore time scale (basically bodge it to 1.0 for this) within the function which allows you to ignore it if you so chose:
static function Lerp (object: Transform, startPos: Vector3, endPos: Vector3, seconds: float, ignoreTimeScale: boolean)
{
if (ignoreTimeScale == true) ---------- THIS
{
seconds = seconds / (1.0 / Time.timeScale); ------ THIS
} ------- THIS
var startTime = Time.time;
var per: float = 0.0;
var timeSinceStart: float = 0.0;
while (object.position != endPos)
{
timeSinceStart = Time.time - startTime;
per = timeSinceStart / seconds;
object.position = Vector3.Lerp(startPos, endPos, per);
yield;
}
}
Your answer
Follow this Question
Related Questions
slow a lerp ? array/static problem 1 Answer
Jump with mathf.lerp problem 2 Answers
how to use time on lerp 2 Answers
Help with time.time when new scene starts. 1 Answer
It is not updated per second 0 Answers