Beispiel #1
0
        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);
            }
        }
Beispiel #2
0
        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);
                    }
                }
            }
        }