/// <summary> /// Calculate mesh generation parameters /// </summary> private void CreateMesh() { Profiler.BeginSample("CreateMesh"); if (_spline == null) { return; } if (_auxTransform1 != null) { GetAuxTranforms(); } if (_auxTransform1 == null) { return; } bool exceededVertsLimit = false; _splineLength = _spline.Length; // 2.0 Mesh generation _spline.CalculateOrientedPoints(_baseMeshLength); int penultimateIndex = _spline.OrientedPoints.Length - 2; for (int i = 0; i <= penultimateIndex; i++) { // Set aux transform 1 _auxTransform1.rotation = _spline.OrientedPoints[i].Rotation; _auxTransform1.position = _spline.OrientedPoints[i].Position + _meshOffset; // Set aux transform 2 _auxTransform2.rotation = _spline.OrientedPoints[i + 1].Rotation; _auxTransform2.position = _spline.OrientedPoints[i + 1].Position + _meshOffset; exceededVertsLimit = false; AddMeshSegment(_auxTransform1, _auxTransform2, out exceededVertsLimit); if (exceededVertsLimit) { _meshGenerationMethod = MeshGenerationMethod.Manual; break; } } Profiler.EndSample(); }
/// <summary> /// Custom inspector /// </summary> public override void OnInspectorGUI() { //base.OnInspectorGUI(); _splineMeshRenderer = (SplineMeshRenderer)target; //Set up the box style if null if (_menuBoxStyle == null) { _menuBoxStyle = new GUIStyle(GUI.skin.box); _menuBoxStyle.normal.textColor = GUI.skin.label.normal.textColor; _menuBoxStyle.fontStyle = FontStyle.Bold; _menuBoxStyle.alignment = TextAnchor.UpperLeft; } serializedObject.Update(); EditorGUILayout.PropertyField(serializedObject.FindProperty("_spline"), false); serializedObject.ApplyModifiedProperties(); EditorGUI.BeginChangeCheck(); _selectedMenuIndex = GUILayout.Toolbar(_selectedMenuIndex, _toolbarMenuOptions); if (EditorGUI.EndChangeCheck()) { GUI.FocusControl(null); } GUILayout.BeginVertical(_menuBoxStyle); if (_selectedMenuIndex == (int)MeshRendererInspectorMenu.MeshGenerationSettings) { #region Mesh Generation Settings GUILayout.Label("Generation Settings", EditorStyles.boldLabel); EditorGUI.BeginChangeCheck(); MeshGenerationMethod meshGenerationMethod = (MeshGenerationMethod)EditorGUILayout.EnumPopup("Mesh Generation Method", _splineMeshRenderer.MeshGenerationMethod); if (EditorGUI.EndChangeCheck()) { Undo.RecordObject(_splineMeshRenderer, "Mesh Generation Method Changed"); MarkSceneAlteration(); _splineMeshRenderer.MeshGenerationMethod = meshGenerationMethod; } EditorGUI.BeginChangeCheck(); Mesh baseMesh = (Mesh)EditorGUILayout.ObjectField("Base Mesh", _splineMeshRenderer.BaseMesh, typeof(Mesh), false); if (EditorGUI.EndChangeCheck()) { Undo.RecordObject(_splineMeshRenderer, "Base Mesh Changed"); MarkSceneAlteration(); _splineMeshRenderer.BaseMesh = baseMesh; } EditorGUI.BeginChangeCheck(); Vector3 meshOffset = EditorGUILayout.Vector3Field("Mesh Offset", _splineMeshRenderer.MeshOffset); if (EditorGUI.EndChangeCheck()) { Undo.RecordObject(_splineMeshRenderer, "Mesh Offset Changed"); MarkSceneAlteration(); _splineMeshRenderer.MeshOffset = meshOffset; } GUILayout.Label("Mesh Operations", EditorStyles.boldLabel); GUILayout.BeginHorizontal(); if (_splineMeshRenderer.MeshGenerationMethod != MeshGenerationMethod.Manual) { if (GUILayout.Button(_btnPrintMeshDetails)) { _splineMeshRenderer.PrintMeshDetails(); } } else { if (GUILayout.Button(_btnCreateMesh)) { _splineMeshRenderer.ExtrudeMesh(); } } if (GUILayout.Button(_btnBakeMesh)) { BakeMeshWindow.ShowWindow(); } GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); if (GUILayout.Button(_btnConnectNewRenderer)) { Selection.activeGameObject = _splineMeshRenderer.ConnectNewRenderer(); MarkSceneAlteration(); } GUILayout.EndHorizontal(); #endregion } else if (_selectedMenuIndex == (int)MeshRendererInspectorMenu.CollisionSettings) { #region Collision Settings GUILayout.Label("Collision Settings", EditorStyles.boldLabel); EditorGUI.BeginChangeCheck(); bool enableCollision = EditorGUILayout.Toggle("Enable Collision", _splineMeshRenderer.EnableCollision); if (EditorGUI.EndChangeCheck()) { Undo.RecordObject(_splineMeshRenderer, "Enable Collision Changed"); MarkSceneAlteration(); _splineMeshRenderer.EnableCollision = enableCollision; } serializedObject.Update(); EditorGUILayout.PropertyField(serializedObject.FindProperty("_customMeshColliders"), true); serializedObject.ApplyModifiedProperties(); #endregion } GUILayout.EndVertical(); }