private void DrawBezierCurve(SplineMonoBehaviour spline) { for (int i = 0; i < spline.Anchors.Count - 1; i++) { var anchor = spline.Anchors[i]; var nextAnchor = spline.Anchors[i + 1]; Handles.DrawBezier( spline.GetPosition(anchor.Origin), spline.GetPosition(nextAnchor.Origin), spline.GetPosition(anchor.PointB), spline.GetPosition(nextAnchor.PointA), Color.grey, null, 3f ); } if (spline.ClosedLoop) { var anchor = spline.Anchors[spline.Anchors.Count - 1]; var nextAnchor = spline.Anchors[0]; Handles.DrawBezier( spline.GetPosition(anchor.Origin), spline.GetPosition(nextAnchor.Origin), spline.GetPosition(anchor.PointB), spline.GetPosition(nextAnchor.PointA), Color.grey, null, 3f ); } }
private void DrawAnchor( SplineMonoBehaviour spline, SplineAnchor anchor ) { Handles.color = Color.white; Handles.DrawWireCube( spline.GetPosition(anchor.Origin), Vector3.one * .5f ); SplinePointPositionHandler(spline, anchor.Origin); DrawAnchorSidePoints(spline, anchor.PointA, Color.green); DrawAnchorSidePoints(spline, anchor.PointB, Color.blue); Handles.color = Color.white; Handles.DrawLine( spline.GetPosition(anchor.Origin), spline.GetPosition(anchor.PointA) ); Handles.DrawLine( spline.GetPosition(anchor.Origin), spline.GetPosition(anchor.PointB) ); }
private void DrawAnchorSidePoints( SplineMonoBehaviour spline, SplinePoint point, Color sphereColor ) { Handles.color = sphereColor; Handles.SphereHandleCap( 0, spline.GetPosition(point), Quaternion.identity, .5f, EventType.Repaint ); SplinePointPositionHandler(spline, point); }
private static void SplinePointPositionHandler( SplineMonoBehaviour currentSpline, SplinePoint point ) { EditorGUI.BeginChangeCheck(); var newPosition = Handles.PositionHandle( currentSpline.GetPosition(point), Quaternion.identity ); if (EditorGUI.EndChangeCheck()) { Undo.RecordObject(currentSpline, "Change Anchor Position"); currentSpline.SetPointPosition(point, newPosition); } }