public void GenerateTrack() { trackPoints.Clear(); Vector3 point = Vector3.zero; float radiusAmount = 0f; centerTrackPoints = new Vector3[curvePoints]; // Set Curves on Bezier Spline bezierSpline = GetComponent<BezierSpline> (); bezierSpline.Reset (); // bezierSpline.ClearControlPoints (); bezierSpline.Loop = true; bezierSpline.OnBezierPointChanged = UpdateTrackMesh; for (int i = 0; i < curvePoints; i++) { radiusAmount = ((float)i / curvePoints) * (2*Mathf.PI); point = new Vector3(radius.x * Mathf.Cos (frequency.x * radiusAmount), 0f, radius.y * Mathf.Sin (frequency.y * radiusAmount)); point = point * radiusSizeFactor; centerTrackPoints[i] = point; trackPoints.Add (point); // Set points in the Bezier curve if (i > 0 && i % 3 == 0) bezierSpline.AddCurve (); bezierSpline.SetControlPoint (i, point); } UpdateTrackMesh (); }
/// <summary> /// Renders content to the inspector panel /// </summary> public override void OnInspectorGUI() { // Pulls variables from runtime so we have the latest values. mSplineSO.Update(); // Allow the loop EditorGUI.BeginChangeCheck(); bool lNewLoop = EditorGUILayout.Toggle(new GUIContent("Loop", ""), mSpline.Loop); if (EditorGUI.EndChangeCheck() && lNewLoop != mSpline.Loop) { mIsDirty = true; Undo.RecordObject(mSpline, "Spine Loop"); mSpline.Loop = lNewLoop; } // Allow the segments to change EditorGUI.BeginChangeCheck(); int lNewSegments = EditorGUILayout.IntField(new GUIContent("Segments", ""), mSpline.Segments); if (EditorGUI.EndChangeCheck() && lNewSegments != mSpline.Segments) { mIsDirty = true; Undo.RecordObject(mSpline, "Spine Segments"); mSpline.Segments = lNewSegments; } // Draw all the curve points for (int i = 0; i < mSpline.ControlPointCount; i++) { EditorGUILayout.BeginHorizontal(); EditorGUI.BeginChangeCheck(); Vector3 lOldPoint = mSpline.GetControlPoint(i); Vector3 lNewPoint = EditorGUILayout.Vector3Field(new GUIContent("Control Point " + i.ToString(), ""), lOldPoint); if (EditorGUI.EndChangeCheck() && lNewPoint != lOldPoint) { mIsDirty = true; Undo.RecordObject(mSpline, "Spline Point Move"); mSpline.SetControlPoint(i, lNewPoint); } GUILayout.Space(5); int lOldConstraint = mSpline.GetControlPointConstraint(i); int lNewConstraint = EditorGUILayout.IntField(new GUIContent("", ""), lOldConstraint, GUILayout.Width(20)); if (lOldConstraint != lNewConstraint) { mIsDirty = true; Undo.RecordObject(mSpline, "Spline Point Constraint"); mSpline.SetControlPointConstraint(i, lNewConstraint); } EditorGUILayout.EndHorizontal(); } // Create a button for adding a new point if (GUILayout.Button("Add Point")) { mIsDirty = true; mSpline.AddControlPoint(); mSelectedControlPointIndex = mSpline.ControlPointCount - 1; } // Create a button for adding a new point if (GUILayout.Button("Insert Point")) { mIsDirty = true; mSpline.InsertControlPoint(mSelectedControlPointIndex); } // Create a button for deleting a point if (GUILayout.Button("Delete Point")) { mIsDirty = true; mSpline.DeleteControlPoint(mSelectedControlPointIndex); mSelectedControlPointIndex = -1; } // If there is a change... update. if (mIsDirty) { // Flag the object as needing to be saved EditorUtility.SetDirty(mSpline); #if UNITY_4_0 || UNITY_4_0_1 || UNITY_4_1 || UNITY_4_2 || UNITY_4_3 || UNITY_4_4 || UNITY_4_5 || UNITY_4_6 || UNITY_5_0 || UNITY_5_1 || UNITY_5_2 EditorApplication.MarkSceneDirty(); #else if (!EditorApplication.isPlaying) { UnityEditor.SceneManagement.EditorSceneManager.MarkSceneDirty(UnityEditor.SceneManagement.EditorSceneManager.GetActiveScene()); } #endif // Pushes the values back to the runtime so it has the changes mSplineSO.ApplyModifiedProperties(); // Clear out the dirty flag mIsDirty = false; } }