- Home /
Vector3.Lerp - Constant speed between distance changes
I'm lerping from object 1 to object 2. I want the rate at which object 1 travels to be the exact same, using Time.deltaTime or Time.time. So if the distance between object 1 and object 2 are 5 meters at one point, I want object 1 to travel at 1 meters per second. If they were 1,000 meters apart, I still want object 1 to travel 1 meter per second. I know the solution is right at my fingertips, but I can't figure it out. I know it's gotta do with Vector3.Distance(object1.transform.position, object2.transform.position) but I don't know what else to do!
If I have speed set defaultly at 2, what can I do to make sure that the Vector3.Lerp (obj1, obj2, Time.deltaTime * newSpeed)
that the newSpeed
is the correct speed (it's gotta be less than the original speed, which is 2 in this case)? Thanks.
Answer by robertbu · Jul 12, 2014 at 05:01 AM
A solution is to use Vector3.MoveTowards() rather than Vector3.Lerp().
transform.position = Vector3.MoveTowards(transform.position, other.position, Time.deltaTime * speed);
Speed is a variable you define and is measured in units per second. So if you set it to 1.0, your object will move at a constant 1.0 units per second no matter the distance. Note that in this form of MoveTowards, the first parameter must be the current position of the object, not the starting position of the object.
Answer by RodrigoSeVeN · Oct 15, 2019 at 10:17 PM
Vector3.MoveTowards() is likely the best approach, but here's the answer for Lerp:
float distance = Vector3.Distance(object1.transform.position, object2.transform.position);
float finalSpeed = (distance / newSpeed);
transform.position = Vector3.Lerp(obj1, obj2, Time.deltaTime / finalSpeed);
Dividing Time.deltaTime by distance makes it move as you wanted.
Dividing distance by newSpeed changes the speed.
Now just find the best value for newSpeed (might need to increase it a little).
Answer by Masserz · Feb 03, 2015 at 03:41 AM
Thanks, I use both:
transform.position = Vector3.MoveTowards (transform.position, other.position, Time.deltaTime * speed / 2);
transform.position = Vector3.Lerp (transform.position, other.position, Time.deltaTime * speed / 2);
to balance the Lerp acceleration and linear effects. Is there a better way of doing this?
I haven't figured it quite out yet, but you would need a $$anonymous$$athf.Lerp function for the third $$anonymous$$oveTowards parameter.
Your answer
Follow this Question
Related Questions
Find center between 4 points 3 Answers
Start Camera Lerp from diffrent script? 1 Answer
Rotating objects around player using lerp 0 Answers
How to update interval between objects in run time? 0 Answers
Fixed distance from point 2 Answers