Unity math functions

created 1. November. 2024

Distance between two points

// normal distance
float distance = Vector3.Magnitude(targetPosition - sourcePosition);

// squared distance - faster since it doesn't have to calculate the square root. 
// it's useful if you only want to check if one distance is larger than another.
float distance = Vector3.SqrMagnitude(targetPosition - sourcePosition);

Convert euler rotation into quaternion rotation

Quaternion rotation = Quaternion.Euler(0.0F, 90.0F, 0.0F);

Rotate vector by quaternion rotation

Vector3 direction = Vector3.forward * rotation;

Convert direction vector to rotation

Quaternion rotation = Quaternion.LookRotation(direction);

Are two vectors facing in the same direction

float result = Vector3.Dot(sourceDirection, targetDirection);
// result > 0 facing towards, result < 0 facing away

Angle between current transform forward direction and target position

Vector3 localPosition = transform.InverseTransformPoint(position);
float xAngle = Mathf.Atan2(localPosition.y, localPosition.z) * Mathf.Rad2Deg;
float yAngle = Mathf.Atan2(localPosition.x, localPosition.z) * Mathf.Rad2Deg;

Points where two lines will be closest to each other

Vector3 n = Vector3.Cross(line1Direction, line2Direction);
Vector3 u = Vector3.Cross(n, line1Origin - line2Origin) / Vector3.Dot(n, n);
Vector3 intersection1 = line1Origin - line1Direction * Vector3.Dot(line2Direction, u);
Vector3 intersection2 = line2Origin - line2Direction * Vector3.Dot(line1Direction, u);