public float GetDistanceByMapPoint(Vector2 point, out bool isOutOfPath, out Vector2 segmentNomal) { float pathDistance = 0, segmentLengthTotal = 0; float minDistSqr = float.MaxValue; Vector2 mapPoint; segmentNomal = Vector2.zero; for (int i = 1; i < m_path.Count; i++) { float projectionLength = 0; float distSqr = SteerManager.GetPointToSegmentDistanceSqr(point, m_path[i - 1], m_path[i], m_normals[i], m_lengths[i], out mapPoint, out projectionLength); if (distSqr < minDistSqr) { minDistSqr = distSqr; segmentNomal = m_normals[i]; pathDistance = segmentLengthTotal + projectionLength; } segmentLengthTotal += m_lengths[i]; } isOutOfPath = minDistSqr > m_radiusSqr; return(pathDistance); }