public void ReIndex() { var searchStepSize = 0.00001f; var length = spline.GetLength(searchStepSize); var indexSize = Mathf.FloorToInt(length * 2); var _linearPoints = new List <Vector3>(indexSize); var t = 0f; var linearDistanceStep = length / 1024; var linearDistanceStep2 = Mathf.Pow(linearDistanceStep, 2); var start = spline.GetNonUniformPoint(0); _linearPoints.Add(start); while (t <= 1f) { var current = spline.GetNonUniformPoint(t); while ((current - start).sqrMagnitude <= linearDistanceStep2) { t += searchStepSize; current = spline.GetNonUniformPoint(t); } start = current; _linearPoints.Add(current); } linearPoints = _linearPoints.ToArray(); }
static void DrawGizmo(SplineComponent spline, int stepCount) { if (spline.points.Count > 0) { var P = 0f; var start = spline.GetNonUniformPoint(0); var step = 1f / stepCount; do { P += step; var here = spline.GetNonUniformPoint(P); Gizmos.DrawLine(start, here); start = here; } while (P + step <= 1); Handles.color = Color.green; foreach (var i in spline.points) { if (i.y != 0 || Tools.pivotRotation == PivotRotation.Global) { var cp = spline.transform.TransformPoint(i); var end = cp; var up = spline.transform.up; if (Tools.pivotRotation == PivotRotation.Local) { end = i; end.y = 0; end = spline.transform.TransformPoint(end); } else { end.y = 0; up = Vector3.up; } if ((cp - end).sqrMagnitude > 0) { Handles.DrawDottedLine(cp, end, 4); var discSize = HandleUtility.GetHandleSize(end) * 0.25f; Handles.DrawWireDisc(end, up, discSize); } } } Handles.color = Color.white; } }