Quick piece of code to find the closest point on a line segment from a point in 3D space: –
/// <summary> /// Get the closest point (and distance) to line segment from a point in 3D space /// </summary> /// <param name="a_sourcePoint">Point that we're finding the closest point to</param> /// <param name="a_start">Start of line segment</param> /// <param name="a_end">End of line segment</param> /// <returns>Closest point on the line segment and distance to the point on line from the source</returns> public Vector3 PointOnLineSegment(Vector3 a_sourcePoint, Vector3 a_start, Vector3 a_end, out float a_length) { Vector3 ba = a_end - a_start; Vector3 va = a_sourcePoint - a_start; Vector3 w2 = va - ((ba * Vector3.Dot(va, ba)) / ba.sqrMagnitude); Vector3 pointOnLine = a_sourcePoint - w2; a_length = (a_sourcePoint - pointOnLine).magnitude; return pointOnLine; }