예제 #1
0
    public SplineMesh.CurveSample ClosestTrackSample(SplineMesh.Spline track)
    {
        int segmentA = raceController.GetTrackSegment(CarInfo?.name);
        int segmentB = -1;

        if (segmentA < 0)
        {
            segmentA = 0;
            segmentB = raceController.GetNumSegments();
        }
        else
        {
            segmentB = raceController.NextSegment(segmentA);
        }

        float begin = Math.Max(0, raceController.TrackDistanceAtSegment(segmentA));
        float end   = Math.Max(0, raceController.TrackDistanceAtSegment(segmentB));

        var   closest         = track.GetSampleAtDistance(begin);
        float closestDistance = float.MaxValue;

        for (float i = begin; i < end; i += 0.05f)
        {
            var curveSample = track.GetSampleAtDistance(i);
            var d           = (gameObject.transform.position - 0.048f * Vector3.up - curveSample.location);
            d.y *= 10;
            var distance = d.magnitude;
            if (distance < closestDistance)
            {
                closestDistance = distance;
                closest         = curveSample;
            }
        }
        return(closest);
    }