protected override void LateUpdate() { base.LateUpdate(); // Make sure the listener exists var listenerPosition = default(Vector3); if (VA_Helper.GetListenerPosition(ref listenerPosition) == true) { if (Points.Count > 1) { var worldPoint = listenerPosition; var localPoint = transform.InverseTransformPoint(worldPoint); var closestDistanceSq = float.PositiveInfinity; var closestPoint = Vector3.zero; for (var i = 1; i < Points.Count; i++) { var closePoint = VA_Helper.ClosestPointToLineSegment(Points[i - 1], Points[i], localPoint); var closeDistanceSq = (closePoint - localPoint).sqrMagnitude; if (closeDistanceSq < closestDistanceSq) { closestDistanceSq = closeDistanceSq; closestPoint = closePoint; } } worldPoint = transform.TransformPoint(closestPoint); SetOuterPoint(worldPoint); } } }