public void DrawCurve(Curve curve) { if (curve != null && curve.CurveDots != null) { int last = curve.CurveDots.Length - 1; MeshFilter outlineMesh = OutLine.GetComponent <MeshFilter>(); MeshFilter startPointMesh = StartPoint.GetComponent <MeshFilter>(); MeshFilter endPointMesh = EndPoint.GetComponent <MeshFilter>(); MeshFilter lineMeshFilter = Line.GetComponent <MeshFilter>(); // Mesh generation Mesh lineMesh = MeshGenerator.MeshFromCurve(curve, GizmosSettings.LineFatSize); // lineMeshFilter.mesh = lineMesh; startPointMesh.mesh = MeshGenerator.CircleMesh(GizmosSettings.LineFatSize / 2f, 180, GizmosSettings.CircleStepSize); endPointMesh.mesh = MeshGenerator.CircleMesh(GizmosSettings.LineFatSize / 2f, 180, GizmosSettings.CircleStepSize); Vector3 startPointAngle = (curve.CurveDots[0].Angle + Vector3.forward * 90); Vector3 endPointAngle = curve.CurveDots[last].Angle - Vector3.forward * 90; //Circle locations StartPoint.transform.localPosition = curve.CurveDots[0].Point; StartPoint.transform.eulerAngles = startPointAngle; EndPoint.transform.localPosition = curve.CurveDots[last].Point; EndPoint.transform.eulerAngles = endPointAngle; //drawing outline float outLineDistance = (GizmosSettings.LineFatSize + GizmosSettings.OutLineFatSize) / 2.0f; List <Vector3> outlineDots = new List <Vector3>(); outlineDots.AddRange(OutLineCircle(StartPoint.transform.position, outLineDistance, curve.CurveDots[0].Angle.z + 90, 180, GizmosSettings.CircleStepSize)); outlineDots.RemoveAt(outlineDots.Count - 1); outlineDots.AddRange(OutLineCurveByAngle(curve, outLineDistance, -90)); List <Vector3> outLineCircle = OutLineCircle(EndPoint.transform.position, outLineDistance, curve.CurveDots[last].Angle.z + -90, 180, GizmosSettings.CircleStepSize); outLineCircle.RemoveAt(0); outLineCircle.RemoveAt(outLineCircle.Count - 1); outlineDots.AddRange(outLineCircle.ToArray()); outlineDots.AddRange(OutLineCurveByAngle(curve, outLineDistance, 90).Reverse()); //Todo:fix first and last part of mesh OutLine.GetComponent <MeshFilter>().mesh = MeshGenerator.MeshFromCurve(new Curve(outlineDots.ToArray()), GizmosSettings.OutLineFatSize); if (lineMesh != null) { Sequence.SetMeshes(MeshGenerator.MeshLineToSquares(lineMesh), MainMaterial); } //Setting Materials OutLine.GetComponent <MeshRenderer>().material = MainMaterial; StartPoint.GetComponent <MeshRenderer>().material = MainMaterial; EndPoint.GetComponent <MeshRenderer>().material = MainMaterial; OutLine.GetComponent <MeshRenderer>().material = OutlineMaterial; } }