|
Does Vector3.Lerp() for transforming position work outside of update?
(comments are locked)
|
|
It's a plain old function, so it 'works' anywhere - in that it will correctly calculate a value that is the linear interpolation between the start and end values. I use it, for example, in my AI code to compute how 'audible' a sound is based on how far away it is. However, most of the time, when people are using Lerp(), they're trying to achieve smooth movement from point A to point B. To get smooth movement, you need to recompute the position very frequently - every frame, if possible. Update() is called every frame, so you could call it there. You could also write a coroutine that does work every frame and calls it:
The advantage of doing it in a coroutine is that when the object isn't moving, the coroutine isn't running, which can save Unity a bit of time; by comparison, if you put the code in Update, Unity will always call Update, even if you end up not doing anything for the frame. Also, with the coroutine approach, you can (if you wish) trade smoothness for framerate by yielding a WaitForSeconds() object instead of null. The longer you WaitForSeconds(), the jerkier the movement will be, but the less frequently Unity will have to do the computation.
(comments are locked)
|
|
It works wherever you want it to, it's a simple mathematical function, min + (max - min) * t You can generally use it well in coroutines, where you have a fixed start and end, and increment the t value from 0 to 1 Quick example for a coroutine: can you give an example of how it might work with a coroutine?
May 07 '11 at 10:24 AM
ina
done - i haven't checked it, but looks reasonable enough at second glance
May 07 '11 at 09:39 PM
Mike 3
(comments are locked)
|
|
No, it is meant to be used within the Update() method. so lerp does not work at all in a function outside? what if update calls a function outside with lerp in it
May 07 '11 at 09:47 AM
ina
It is not meant to be used in Update. In fact it's generally better outside Update. http://answers.unity3d.com/questions/6949/can-someone-explain-how-using-time-deltatime-as-t-in-a-lerp-actually-works/6950#6950
May 07 '11 at 10:29 AM
Eric5h5
ina, sure, Update() can call any external method. But any method that Update() calls will still run the context of the Update() method execution. Eric thanks for the informative post, interesting stuff!
May 07 '11 at 11:18 AM
Meltdown
Eric, I read your link but couldn't see from your answer why it's bad to call Lerp() inside Update(). Could you elaborate?
May 07 '11 at 11:44 AM
superpig
people tend to misuse it a lot, lerping from the current position to the target position, which ends up with a weird almost exponential decay movement, which is dependent on frame rate.
May 07 '11 at 09:45 PM
Mike 3
(comments are locked)
|
