protected override void BodyGUI() { base.BodyGUI(); MeshGenerator generator = (MeshGenerator)target; EditorGUI.BeginChangeCheck(); if (showTangents) { EditorGUILayout.Space(); EditorGUILayout.LabelField("Mesh", EditorStyles.boldLabel); if (showTangents) { generator.calculateTangents = EditorGUILayout.Toggle("Calculate Tangents", generator.calculateTangents); } } EditorGUILayout.Space(); EditorGUILayout.LabelField("Vertices", EditorStyles.boldLabel); if (showSize) { generator.size = EditorGUILayout.FloatField("Size", generator.size); } if (showColor) { generator.color = EditorGUILayout.ColorField("Color", generator.color); } if (showNormalMethod) { generator.normalMethod = EditorGUILayout.Popup("Normal Method", generator.normalMethod, normalMethods); } if (showOffset) { generator.offset = EditorGUILayout.Vector3Field("Offset", generator.offset); } if (showRotation) { generator.rotation = EditorGUILayout.Slider("Rotation", generator.rotation, -180f, 180f); } if (showDoubleSided || showFlipFaces) { EditorGUILayout.Space(); EditorGUILayout.LabelField("Faces", EditorStyles.boldLabel); if (showDoubleSided) { generator.doubleSided = EditorGUILayout.Toggle("Double-sided", generator.doubleSided); } if (!generator.doubleSided && showFlipFaces) { generator.flipFaces = EditorGUILayout.Toggle("Flip faces", generator.flipFaces); } } if (generator.GetComponent <MeshCollider>() != null) { EditorGUILayout.Space(); EditorGUILayout.LabelField("Mesh Collider", EditorStyles.boldLabel); generator.colliderUpdateRate = EditorGUILayout.FloatField("Collider Update Iterval", generator.colliderUpdateRate); } if (EditorGUI.EndChangeCheck()) { EditorUtility.SetDirty(target); } }
private void Bake(MeshGenerator gen) { MeshFilter filter = gen.GetComponent <MeshFilter>(); if (filter == null) { EditorUtility.DisplayDialog("Save error", "No mesh present in " + gen.name, "OK"); return; } if (copy) { #if UNITY_5_5_OR_NEWER UnityEditor.MeshUtility.Optimize(filter.sharedMesh); #else filter.sharedMesh.Optimize(); #endif Unwrapping.GenerateSecondaryUVSet(filter.sharedMesh); } else { gen.Bake(isStatic, true); } if (format == BakeMeshWindow.SaveFormat.OBJ) { MeshRenderer renderer = gen.GetComponent <MeshRenderer>(); dirInfo = new DirectoryInfo(savePath); FileInfo[] files = dirInfo.GetFiles(filter.sharedMesh.name + "*.obj"); string meshName = filter.sharedMesh.name; if (files.Length > 0) { meshName += "_" + files.Length; } string path = savePath + "/" + meshName + ".obj"; string objString = MeshUtility.ToOBJString(filter.sharedMesh, renderer.sharedMaterials); File.WriteAllText(path, objString); if (copy) { string relativepath = "Assets" + path.Substring(Application.dataPath.Length); AssetDatabase.ImportAsset(relativepath, ImportAssetOptions.ForceSynchronousImport); #if UNITY_5_0 filter.sharedMesh = (Mesh)AssetDatabase.LoadAssetAtPath(relativepath, typeof(Mesh)); #else filter.sharedMesh = AssetDatabase.LoadAssetAtPath <Mesh>(relativepath); #endif } } if (format == BakeMeshWindow.SaveFormat.MeshAsset) { dirInfo = new DirectoryInfo(savePath); FileInfo[] files = dirInfo.GetFiles(filter.sharedMesh.name + "*.asset"); string meshName = filter.sharedMesh.name; if (files.Length > 0) { meshName += "_" + files.Length; } string path = savePath + "/" + meshName + ".asset"; string relativepath = "Assets" + path.Substring(Application.dataPath.Length); if (copy) { Mesh assetMesh = MeshUtility.Copy(filter.sharedMesh); AssetDatabase.CreateAsset(assetMesh, relativepath); } else { AssetDatabase.CreateAsset(filter.sharedMesh, relativepath); } } if (permanent && !copy) { SplineComputer meshGenComputer = gen.computer; if (permanent) { meshGenComputer.Unsubscribe(gen); Object.DestroyImmediate(gen); } if (removeComputer) { if (meshGenComputer.GetComponents <Component>().Length == 2) { Object.DestroyImmediate(meshGenComputer.gameObject); } else { Object.DestroyImmediate(meshGenComputer); } } } }