示例#1
0
    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);
            }
        }
    }