private void Draw() { Vector3 startPoint = linePath.Evaluate(0f); Vector3 endPoint = linePath.Evaluate(1f); // draw line var cPointCache = new Vector3[32]; for (int i = 0; i < cPointCache.Length; i++) { cPointCache[i] = Vector3.Lerp(startPoint, endPoint, (float)i / (cPointCache.Length - 1)); } for (int i = 0; i < cPointCache.Length - 1; i++) { Handles.color = Color.Lerp(Color.yellow, Color.magenta, (float)i / cPointCache.Length); var lineSegment = new Vector3[2]; lineSegment[0] = cPointCache[i]; lineSegment[1] = cPointCache[i + 1]; Handles.DrawAAPolyLine(lineSegment); } // draw direction cone cap if (!settings.HideDirectionCones && linePath.LocalSpaceTransform.lossyScale != Vector3.zero && linePath.StartPosition != linePath.EndPosition) // also hide cones if virtually a dot { float startConeSize = PathEditorUtility.Nice3DHandleSize(startPoint); float endConeSize = PathEditorUtility.Nice3DHandleSize(endPoint); Handles.color = Color.yellow; Handles.ConeCap(0, startPoint, Quaternion.LookRotation(linePath.Tangent()), startConeSize); Handles.color = Color.magenta; Handles.ConeCap(0, endPoint, Quaternion.LookRotation(linePath.Tangent()), endConeSize); } // test t Handles.color = PathEditorUtility.GetTColor(settings.EditorData.T); if (settings.TestInterpolate) { Vector3 targetPoint = linePath.Evaluate(settings.EditorData.T); float sphereSize = PathEditorUtility.Nice3DHandleSize(targetPoint); Handles.SphereCap(0, targetPoint, Quaternion.identity, sphereSize); } // draw GUI InterpolateSceneGUI(); ToolShelf(); }