private IEnumerator GenerateNewSegment()
    {
        while (true)
        {
            // Define new start and end points, linearliy.
            var start = currentEnd;
            var end   = currentEnd + (Vector3.forward * segmentLength);

            // Randomly translate the new end point.
            end = ApplyRandom(end, segmentDirectionRandomnessRange);

            // Define new control points, linearly.
            var fullSegmentVec    = end - start;
            var thirdOfSegVect    = fullSegmentVec / 3;
            var startControlPoint = start + thirdOfSegVect;
            var endControlPoint   = start + (thirdOfSegVect * 2);

            // Randomly translate control points.
            startControlPoint = ApplyRandom(startControlPoint, controlPointsDirectionRandomnessRange);
            endControlPoint   = ApplyRandom(endControlPoint, controlPointsDirectionRandomnessRange);

            // Smooth curve by aligning the new start control point to the last end control point.
            if (lastEndControlPoint.HasValue)
            {
                startControlPoint = AlignThirtPoint(lastEndControlPoint.Value, start, startControlPoint);
            }

            // Create the new curve.
            var newCurve = new Curve(start, startControlPoint, end, endControlPoint);
            curves.Add(newCurve);

            // Update the storages to use in the gizmos preview.
            curvesArr = curves.ToArray();
            path      = Bezier.GetPointsInPath(curves.ToArray(), previewResolution);

            // Set the ground for the next path.
            currentEnd          = end;
            lastEndControlPoint = endControlPoint;
            yield return(new WaitForSeconds(0.3f));
        }
    }
    private IEnumerator GenerateNewSegment()
    {
        while (true)
        {
            // Define new start and end points, linearliy.
            var start = currentEnd;
            var end = currentEnd + (Vector3.forward * segmentLength);

            // Randomly translate the new end point.
            end = ApplyRandom(end, segmentDirectionRandomnessRange);

            // Define new control points, linearly.
            var fullSegmentVec = end - start;
            var thirdOfSegVect = fullSegmentVec / 3;
            var startControlPoint = start + thirdOfSegVect;
            var endControlPoint = start + (thirdOfSegVect * 2);

            // Randomly translate control points.
            startControlPoint = ApplyRandom(startControlPoint, controlPointsDirectionRandomnessRange);
            endControlPoint = ApplyRandom(endControlPoint, controlPointsDirectionRandomnessRange);

            // Smooth curve by aligning the new start control point to the last end control point.
            if (lastEndControlPoint.HasValue)
                startControlPoint = AlignThirtPoint(lastEndControlPoint.Value, start, startControlPoint);

            // Create the new curve.
            var newCurve = new Curve(start, startControlPoint, end, endControlPoint);
            curves.Add(newCurve);

            // Update the storages to use in the gizmos preview.
            curvesArr = curves.ToArray();
            path = Bezier.GetPointsInPath(curves.ToArray(), previewResolution);

            // Set the ground for the next path.
            currentEnd = end;
            lastEndControlPoint = endControlPoint;
            yield return new WaitForSeconds(0.3f);
        }
    }