Daniel
Daniel

Reputation: 7724

Find collision time given distance and speed

Suppose I have an object A at position x = 0 and object B at position x = 16.

Suppose A have this code:

public class Move : MonoBehaviour 
{
    float speed = 0.04f;

    Update()
    {
       transform.Translate(speed, 0, 0);
    }
}

My question is: how to evaluate how many seconds (precisely) will it take for A to collide with B?


If I apply the formula S = S0 + vt, it won't work correctly, because I don't know how to measure how many frames it will pass in a second to exactly measure what speed is.

Upvotes: 1

Views: 276

Answers (1)

derHugo
derHugo

Reputation: 90580

First of all you shouldn't do that. Your code is currently framerate-dependent so the object moves faster if you have a higher framerate!

Rather use Time.deltaTime

This property provides the time between the current and previous frame.

to convert your speed from Unity Units / frame into Unity Units / second

transform.Translate(speed * Time.deltaTime, 0, 0);

this means the object now moves with 0.04 Unity Units / second (framerate-independent).


Then I would say the required time in seconds is simply

var distance = Mathf.Abs(transform.position.x - objectB.transform.position.x);
var timeInSeconds = distance / speed;

Though .. this obviously still assumes by "collide" you mean at the same position (at least on the X axis) .. you could also take their widths into account since their surfaces will collide earlier than this ;)

var distance = Mathf.Abs(transform.position.x - objectB.transform.position.x) - (objectAWidth + objectBWidth);
var timeInSeconds = distance / speed;

Upvotes: 4

Related Questions