Skip to content

Instantly share code, notes, and snippets.

@naelstrof
Created August 12, 2021 08:42
Show Gist options
  • Save naelstrof/bca75a664396fbb857e135ef739d7370 to your computer and use it in GitHub Desktop.
Save naelstrof/bca75a664396fbb857e135ef739d7370 to your computer and use it in GitHub Desktop.
Unity initial launch rigidbody velocity calculation
// A function that calculates the initial velocity of a rigidbody to hit the end point within the specified flight time.
// Rigidbody must have drag set to 0, otherwise it wont work.
// Classical projectile physics (dx = v0*t, dy = v0*t-0.5gt^2 type stuff)
private Vector3 GetLaunchVelocity(float flightTime, Vector3 startingPoint, Vector3 endPoint) {
Vector3 gravityNormal = Physics.gravity.normalized;
Vector3 dx = Vector3.ProjectOnPlane(endPoint, gravityNormal) - Vector3.ProjectOnPlane(startingPoint, gravityNormal);
Vector3 initialVelocityX = dx/flightTime;
Vector3 dy = Vector3.Project(endPoint, gravityNormal) - Vector3.Project(startingPoint, gravityNormal);
Vector3 g = 0.5f * Physics.gravity * (flightTime * flightTime);
Vector3 initialVelocityY = (dy - g)/flightTime;
return initialVelocityX + initialVelocityY;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment