private void InitBezier() { if (BezierSpline == null) { BezierSpline = new GameObject().AddComponent <CatlikeBezierSpline>(); BezierSpline.transform.parent = null;//SpaceTimeParrametrs.Center; BezierSpline.transform.position = Vector3.zero; } if (BezierInitied) { return; } Debug.LogError("InitBezier"); BezierInitied = true; BezierSpline.points = new Vector3[Positions.Count * 3 - 2]; BezierSpline.modes = new CatlikeBezierControlPointMode[(int)Mathf.Ceil((BezierSpline.points.Length + 1) / 3f)]; for (int i = 0; i < Positions.Count; i++) { BezierSpline.SetControlPoint(i * 3, Positions[i].Position); Vector3 currenControllPointPos = Positions[i].Position; if (i != 0) { Vector3 preDirPos = BezierSpline.points[(i - 1) * 3 + 1]; BezierSpline.points[i * 3 - 1] = Vector3.Lerp(preDirPos, currenControllPointPos, 0.66f); } if (i != 0 && i != Positions.Count - 1) { Vector3 toNextCPDistance = Positions[i + 1].Position - currenControllPointPos; Vector3 prev = (currenControllPointPos - BezierSpline.points[i * 3 - 1]).normalized; BezierSpline.points[i * 3 + 1] = currenControllPointPos + (prev * (toNextCPDistance.magnitude / 3)); } } }
private void DrawSelectedPointInspector() { GUILayout.Label("Selected Point"); EditorGUI.BeginChangeCheck(); Vector3 point = EditorGUILayout.Vector3Field("Position", spline.GetControlPoint(selectedIndex)); if (EditorGUI.EndChangeCheck()) { Undo.RecordObject(spline, "Move Point"); EditorUtility.SetDirty(spline); spline.SetControlPoint(selectedIndex, point); } EditorGUI.BeginChangeCheck(); CatlikeBezierControlPointMode mode = (CatlikeBezierControlPointMode)EditorGUILayout.EnumPopup("Mode", spline.GetControlPointMode(selectedIndex)); if (EditorGUI.EndChangeCheck()) { Undo.RecordObject(spline, "Change Point Mode"); spline.SetControlPointMode(selectedIndex, mode); EditorUtility.SetDirty(spline); } }