Ejemplo n.º 1
0
    public static void saveFrozenMesh(string path)
    {
        path = YuTools_Utils.shortenAssetPath(path);
        int counter = 1;

        if (YuME_mapEditor.findTileMapParent())
        {
            foreach (Transform child in YuME_mapEditor.tileMapParent.transform)
            {
                if (child.gameObject.name == "frozenMap")
                {
                    GameObject saveMap = Instantiate(child.gameObject);
                    saveMap.name = YuME_mapEditor.tileMapParent.name;

                    if (!AssetDatabase.IsValidFolder(path + "/" + saveMap.name + "Meshes"))
                    {
                        AssetDatabase.CreateFolder(path, saveMap.name + "Meshes");
                    }

                    EditorUtility.ClearProgressBar();

                    foreach (Transform frozenMesh in saveMap.transform)
                    {
                        EditorUtility.DisplayProgressBar("Saving Meshes", "Saving Mesh " + (counter) + ". This might take some time", 1);
                        Mesh saveMesh = Object.Instantiate(frozenMesh.GetComponent <MeshFilter>().sharedMesh) as Mesh;
                        //Unwrapping.GenerateSecondaryUVSet(saveMesh);
                        AssetDatabase.CreateAsset(saveMesh, path + "/" + saveMap.name + "Meshes/" + frozenMesh.name + counter + ".asset");
                        frozenMesh.GetComponent <MeshFilter>().mesh = saveMesh;
                        counter++;
                    }

                    EditorUtility.ClearProgressBar();

                    Object prefabAlreadyCreated = AssetDatabase.LoadAssetAtPath(path + "/" + saveMap.name + ".prefab", typeof(GameObject));

                    if (prefabAlreadyCreated != null)
                    {
                        PrefabUtility.ReplacePrefab(saveMap, prefabAlreadyCreated, ReplacePrefabOptions.ReplaceNameBased);
                    }
                    else
                    {
                        PrefabUtility.CreatePrefab(path + "/" + saveMap.name + ".prefab", saveMap);
                    }

                    AssetDatabase.SaveAssets();

                    if (saveMap != null)
                    {
                        DestroyImmediate(saveMap);
                    }
                }
            }

            AssetDatabase.Refresh();
        }
    }
Ejemplo n.º 2
0
    void OnGUI()
    {
        EditorGUILayout.Space();

        EditorGUILayout.BeginVertical("box");

        EditorGUILayout.LabelField("Select Prefab Destination Folder", EditorStyles.boldLabel);

        if (GUILayout.Button("Prefab Destination Folder", GUILayout.Height(30)))
        {
            editorData.destinationFolder = EditorUtility.OpenFolderPanel("Prefab Destination Folder", "", "");
            editorData.destinationFolder = YuTools_Utils.shortenAssetPath(editorData.destinationFolder);
            if (editorData.destinationFolder == "")
            {
                editorData.destinationFolder = "Assets/";
            }
        }

        EditorGUILayout.BeginVertical("box");

        EditorGUILayout.LabelField("Prefab Folder:", EditorStyles.boldLabel);
        EditorGUILayout.LabelField(editorData.destinationFolder);

        EditorGUILayout.EndVertical();
        EditorGUILayout.EndVertical();

        EditorGUILayout.BeginVertical("box");

        EditorGUILayout.LabelField("Prefab Pivot Setting:", EditorStyles.boldLabel);
        editorData.yPivotType = EditorGUILayout.Popup("Pivot Setting", editorData.yPivotType, editorData.yPivotTypes);
        EditorGUILayout.EndVertical();

        // ----------------------------------------------------------------------------------------------------
        // ------ Append Settings
        // ----------------------------------------------------------------------------------------------------

        EditorGUILayout.BeginVertical("box");

        EditorGUILayout.LabelField("Custom Append Label", EditorStyles.boldLabel);

        EditorGUILayout.BeginVertical("box");

        editorData.appendName = EditorGUILayout.TextField("Append to Prefab Name", editorData.appendName);

        EditorGUILayout.EndVertical();
        EditorGUILayout.EndVertical();

        if (GUI.changed)
        {
            SceneView.RepaintAll();
        }
    }
Ejemplo n.º 3
0
    void OnGUI()
    {
        // ----------------------------------------------------------------------------------------------------
        // ------ Tile Converter Data
        // ----------------------------------------------------------------------------------------------------

        EditorGUILayout.Space();
        GUILayout.Label(editorData.tileconverterHeader);

        _scrollPosition = EditorGUILayout.BeginScrollView(_scrollPosition);

        EditorGUILayout.LabelField("Tile Converter Settings", EditorStyles.boldLabel);

        // ----------------------------------------------------------------------------------------------------
        // ------ Folder Settings
        // ----------------------------------------------------------------------------------------------------

        EditorGUILayout.Space();
        EditorGUILayout.LabelField("Select Tile Prefab Destination Folder", EditorStyles.boldLabel);

        EditorGUILayout.BeginVertical("box");

        EditorGUILayout.LabelField("Select Source Prefab Folders");

        if (GUILayout.Button("Prefab Source Folder", GUILayout.Height(30)))
        {
            userSettings.c_sourceFolder = EditorUtility.OpenFolderPanel("Tile Prefab Source Folder", "", "");

            if (userSettings.c_sourceFolder == "")
            {
                userSettings.c_sourceFolder = "Assets/";
            }
        }

        EditorGUILayout.Space();
        EditorGUILayout.LabelField("Select Tile Destination Folder");

        if (GUILayout.Button("Tile Destination", GUILayout.Height(30)))
        {
            userSettings.c_destinationFolder = EditorUtility.OpenFolderPanel("Tile Prefab Destination Folder", "", "");

            if (userSettings.c_destinationFolder == "")
            {
                userSettings.c_destinationFolder = "Assets/";
            }
        }

        userSettings.c_destinationFolder = YuTools_Utils.shortenAssetPath(userSettings.c_destinationFolder);

        EditorGUILayout.Space();
        EditorGUILayout.EndVertical();

        userSettings.c_sourceFolder = YuTools_Utils.shortenAssetPath(userSettings.c_sourceFolder);

        // ----------------------------------------------------------------------------------------------------
        // ------ Name Settings
        // ----------------------------------------------------------------------------------------------------

        EditorGUILayout.Space();
        EditorGUILayout.LabelField("Tile Set Name", EditorStyles.boldLabel);

        EditorGUILayout.BeginVertical("box");

        userSettings.c_name = EditorGUILayout.TextField("Set Tile Set Name", userSettings.c_name);

        EditorGUILayout.EndVertical();

        // ----------------------------------------------------------------------------------------------------
        // ------ Scale Settings
        // ----------------------------------------------------------------------------------------------------

        EditorGUILayout.Space();
        EditorGUILayout.LabelField("Scale Adjustment", EditorStyles.boldLabel);

        EditorGUILayout.BeginVertical("box");

        userSettings.c_scale = EditorGUILayout.FloatField("Rescale Factor", userSettings.c_scale);

        EditorGUILayout.EndVertical();

        // ----------------------------------------------------------------------------------------------------
        // ------ Offset Settings
        // ----------------------------------------------------------------------------------------------------

        EditorGUILayout.Space();
        EditorGUILayout.LabelField("Offset Adjustment", EditorStyles.boldLabel);

        EditorGUILayout.BeginVertical("box");

        userSettings.c_offset = EditorGUILayout.Vector3Field("Offset Values", userSettings.c_offset);

        EditorGUILayout.EndVertical();

        // ----------------------------------------------------------------------------------------------------
        // ------ Append Settings
        // ----------------------------------------------------------------------------------------------------

        EditorGUILayout.Space();
        EditorGUILayout.LabelField("Custom Append Label", EditorStyles.boldLabel);

        EditorGUILayout.BeginVertical("box");

        userSettings.c_appendName = EditorGUILayout.TextField("Append to Tile Name", userSettings.c_appendName);

        EditorGUILayout.EndVertical();

        // ----------------------------------------------------------------------------------------------------
        // ------ Import Button
        // ----------------------------------------------------------------------------------------------------

        EditorGUILayout.Space();

        if (userSettings.c_sourceFolder != "" && userSettings.c_destinationFolder != "")
        {
            if (GUILayout.Button("Convert Tileset", GUILayout.Height(40)))
            {
                bool tileDestinationFolderWarning = true;

                if (userSettings.c_destinationFolder == "Assets/")
                {
                    tileDestinationFolderWarning = EditorUtility.DisplayDialog("Tile Prefabs will be created in the root Assets Folder",
                                                                               "Are you sure you want create the tile prefabs in the root Asset/ folder?", "OK", "Cancel");
                }

                if (tileDestinationFolderWarning)
                {
                    createTileSet(false);
                    recreateCustomBrushes(userSettings.c_destinationFolder);
                    cleanUpImport();
                }
            }
        }
        else
        {
            EditorGUILayout.HelpBox("Set a source and destination directories to start conversion", MessageType.Warning);
        }

        // ----------------------------------------------------------------------------------------------------
        // ------ Reimport Button
        // ----------------------------------------------------------------------------------------------------

        //EditorGUILayout.Space();

        if (userSettings.c_sourceFolder != "" && userSettings.c_destinationFolder != "")
        {
            EditorGUILayout.HelpBox("Use reimport if you are happy with your scale settings but wish to add new tiles to the exisiting set.", MessageType.Info);
            if (GUILayout.Button("Reimport Tileset", GUILayout.Height(40)))
            {
                bool tileDestinationFolderWarning = true;

                if (userSettings.c_destinationFolder == "Assets/")
                {
                    tileDestinationFolderWarning = EditorUtility.DisplayDialog("Tile Prefabs will be created in the root Assets Folder",
                                                                               "Are you sure you want create the tile prefabs in the root Asset/ folder?", "OK", "Cancel");
                }

                if (tileDestinationFolderWarning)
                {
                    createTileSet(true);
                    recreateCustomBrushes(userSettings.c_destinationFolder);
                    cleanUpImport();
                }
            }
        }
        else
        {
            EditorGUILayout.HelpBox("Set a source and destination directories to start conversion", MessageType.Warning);
        }

        // ----------------------------------------------------------------------------------------------------
        // ------ Output Folder Information
        // ----------------------------------------------------------------------------------------------------

        EditorGUILayout.Space();

        EditorGUILayout.BeginVertical("box");

        EditorGUILayout.LabelField("Source Prefab Folder:", EditorStyles.boldLabel);
        EditorGUILayout.LabelField(userSettings.c_sourceFolder);
        EditorGUILayout.LabelField("Tile Output Folder:", EditorStyles.boldLabel);
        EditorGUILayout.LabelField(userSettings.c_destinationFolder);

        EditorGUILayout.EndVertical();

        EditorGUILayout.EndScrollView();

        // ----------------------------------------------------------------------------------------------------
        // ------ GUI Changed
        // ----------------------------------------------------------------------------------------------------

        if (GUI.changed)
        {
            EditorUtility.SetDirty(userSettings);
        }
    }
Ejemplo n.º 4
0
    public static void saveFrozenMesh(string path)
    {
        path = YuTools_Utils.shortenAssetPath(path);
        int counter = 1;

        if (YuME_mapEditor.findTileMapParent())
        {
            foreach (Transform child in YuME_mapEditor.tileMapParent.transform)
            {
                if (child.gameObject.name == "frozenMap")
                {
                    GameObject saveMap = Instantiate(child.gameObject);
                    saveMap.name = YuME_mapEditor.tileMapParent.name;

                    if (!AssetDatabase.IsValidFolder(path + "/" + saveMap.name + "Meshes"))
                    {
                        AssetDatabase.CreateFolder(path, saveMap.name + "Meshes");
                        AssetDatabase.SaveAssets();
                        AssetDatabase.Refresh();
                    }

                    EditorUtility.ClearProgressBar();

                    foreach (Transform frozenMesh in saveMap.transform)
                    {
                        EditorUtility.DisplayProgressBar("Saving Meshes", "Saving Mesh " + (counter) + ". This might take some time", 1);
                        Mesh saveMesh = Object.Instantiate(frozenMesh.GetComponent <MeshFilter>().sharedMesh) as Mesh;
                        //Unwrapping.GenerateSecondaryUVSet(saveMesh);
                        try
                        {
                            AssetDatabase.CreateAsset(saveMesh, path + "/" + saveMap.name + "Meshes/" + frozenMesh.name + counter + ".asset");
                        }
                        catch
                        {
                            Debug.LogWarning("Failed to create saved map. This is likely due to a new folder being created and Unity not refreshing the asset database. Please retry saving the map.");
                            EditorUtility.ClearProgressBar();
                            return;
                        }
                        frozenMesh.GetComponent <MeshFilter>().mesh = saveMesh;
                        counter++;
                    }

                    EditorUtility.ClearProgressBar();

                    Object prefabAlreadyCreated = AssetDatabase.LoadAssetAtPath(path + "/" + saveMap.name + ".prefab", typeof(GameObject));

                    if (prefabAlreadyCreated != null)
#if UNITY_2018_3_OR_NEWER
                    { PrefabUtility.SaveAsPrefabAssetAndConnect(saveMap, path + "/" + saveMap.name + ".prefab", InteractionMode.AutomatedAction); }
#else
                    { PrefabUtility.ReplacePrefab(saveMap, prefabAlreadyCreated, ReplacePrefabOptions.ReplaceNameBased); }
#endif
                    else
#if UNITY_2018_3_OR_NEWER
                    { PrefabUtility.SaveAsPrefabAsset(saveMap, path + "/" + saveMap.name + ".prefab"); }
#else
                    { PrefabUtility.CreatePrefab(path + "/" + saveMap.name + ".prefab", saveMap); }
#endif

                    AssetDatabase.SaveAssets();

                    if (saveMap != null)
                    {
                        DestroyImmediate(saveMap);
                    }
                }
            }

            AssetDatabase.Refresh();
        }
Ejemplo n.º 5
0
    void OnGUI()
    {
        // ----------------------------------------------------------------------------------------------------
        // ------ Tile Import Data
        // ----------------------------------------------------------------------------------------------------

        EditorGUILayout.Space();
        GUILayout.Label(editorData.tileImporterHeader);

        _scrollPosition = EditorGUILayout.BeginScrollView(_scrollPosition);

        EditorGUILayout.LabelField("Tile Import Settings", EditorStyles.boldLabel);

        EditorGUILayout.BeginVertical("box");

        if (userSettings.sourceTiles == null)
        {
            userSettings.sourceTiles = (GameObject)EditorGUILayout.ObjectField("Source Tiles Object", null, typeof(GameObject), false);
        }
        else
        {
            userSettings.sourceTiles = (GameObject)EditorGUILayout.ObjectField("Source Tiles Object", userSettings.sourceTiles, typeof(GameObject), false);
        }

        if (userSettings.sourceMaterial == null)
        {
            userSettings.sourceMaterial = (Material)EditorGUILayout.ObjectField("Source Tile Material", null, typeof(Material), false);
        }
        else
        {
            userSettings.sourceMaterial = (Material)EditorGUILayout.ObjectField("Source Tile Material", userSettings.sourceMaterial, typeof(Material), false);
        }

        if (userSettings.sourceTexture == null)
        {
            userSettings.sourceTexture = (Texture)EditorGUILayout.ObjectField("Source Tile Texture", null, typeof(Texture), false);
        }
        else
        {
            userSettings.sourceTexture = (Texture)EditorGUILayout.ObjectField("Source Tile Texture", userSettings.sourceTexture, typeof(Texture), false);
        }

        EditorGUILayout.EndVertical();

        // ----------------------------------------------------------------------------------------------------
        // ------ Static Settings
        // ----------------------------------------------------------------------------------------------------

        EditorGUILayout.Space();

        EditorGUILayout.LabelField("Prefab Static Setting", EditorStyles.boldLabel);

        EditorGUILayout.BeginVertical("box");

        userSettings.tileStatic = EditorGUILayout.Toggle("Set Tiles as Static", userSettings.tileStatic);

        EditorGUILayout.EndVertical();

        // ----------------------------------------------------------------------------------------------------
        // ------ Alt Settings
        // ----------------------------------------------------------------------------------------------------

        EditorGUILayout.Space();

        EditorGUILayout.LabelField("ALT Tile Setting", EditorStyles.boldLabel);

        EditorGUILayout.BeginVertical("box");

        userSettings.altIdentifier = EditorGUILayout.TextField("Alternative Tile Identifier", userSettings.altIdentifier);

        EditorGUILayout.EndVertical();

        // ----------------------------------------------------------------------------------------------------
        // ------ Shadow Settings
        // ----------------------------------------------------------------------------------------------------

        EditorGUILayout.Space();

        EditorGUILayout.LabelField("Prefab Shadow Setup", EditorStyles.boldLabel);

        EditorGUILayout.BeginVertical("box");

        userSettings.shadowCastingMode = EditorGUILayout.Popup("Cast Shadows", userSettings.shadowCastingMode, new string[] { "Off", "On", "ShadowsOnly", "TwoSided" });

        userSettings.receiveShadows = EditorGUILayout.Toggle("Receive Shadows", userSettings.receiveShadows);

        EditorGUILayout.EndVertical();

        // ----------------------------------------------------------------------------------------------------
        // ------ Collision Settings
        // ----------------------------------------------------------------------------------------------------

        EditorGUILayout.Space();

        EditorGUILayout.LabelField("Tile Collision Setup", EditorStyles.boldLabel);

        EditorGUILayout.BeginVertical("box");

        userSettings.bypassCollisionSetup = EditorGUILayout.Toggle("Bypass Collision Setup", userSettings.bypassCollisionSetup);

        if (!userSettings.bypassCollisionSetup)
        {
            userSettings.importCollision = EditorGUILayout.Toggle("Custom Collision Mesh", userSettings.importCollision);

            if (userSettings.importCollision)
            {
                userSettings.collisionIdentifier = EditorGUILayout.TextField("Collision Mesh Identifier", userSettings.collisionIdentifier);
            }
        }

        EditorGUILayout.EndVertical();

        // ----------------------------------------------------------------------------------------------------
        // ------ Bounding Box Settings
        // ----------------------------------------------------------------------------------------------------

        EditorGUILayout.Space();

        EditorGUILayout.LabelField("Tile Bounding Setup", EditorStyles.boldLabel);

        EditorGUILayout.BeginVertical("box");

        userSettings.importCustomBounds = EditorGUILayout.Toggle("Custom Bounds Mesh", userSettings.importCustomBounds);

        if (userSettings.importCustomBounds)
        {
            userSettings.customBoundsIdentifier = EditorGUILayout.TextField("Custom Bounds Identifier", userSettings.customBoundsIdentifier);
        }

        EditorGUILayout.EndVertical();

        //data.userSettings.splitByType = EditorGUI.Toggle(new Rect(3, 295, position.width - 3, 20),
        //    new GUIContent("Split Tiles by Type", "Checks the tile name for keywords such as 'wall', 'floor', 'corner' and puts them in seperate folders for easy navigation"),
        //    data.userSettings.splitByType);

        // ----------------------------------------------------------------------------------------------------
        // ------ Append Settings
        // ----------------------------------------------------------------------------------------------------

        EditorGUILayout.Space();

        EditorGUILayout.LabelField("Custom Append Label", EditorStyles.boldLabel);

        EditorGUILayout.BeginVertical("box");

        userSettings.appendName = EditorGUILayout.TextField("Append to Tile Name", userSettings.appendName);

        EditorGUILayout.EndVertical();

        // ----------------------------------------------------------------------------------------------------
        // ------ Folder Settings
        // ----------------------------------------------------------------------------------------------------

        EditorGUILayout.Space();

        EditorGUILayout.LabelField("Select Tile Prefab Destination Folder", EditorStyles.boldLabel);

        EditorGUILayout.BeginVertical("box");

        EditorGUILayout.LabelField("Set Destination Folders");

        if (GUILayout.Button("Tile Destination", GUILayout.Height(30)))
        {
            userSettings.destinationFolder = EditorUtility.OpenFolderPanel("Tile Prefab Destination Folder", "", "");

            if (userSettings.destinationFolder == "")
            {
                userSettings.destinationFolder = "Assets/";
            }
        }

        userSettings.destinationFolder = YuTools_Utils.shortenAssetPath(userSettings.destinationFolder);

        EditorGUILayout.Space();

        EditorGUILayout.LabelField("Select Mesh Destination Folder");

        if (GUILayout.Button("Mesh Destination", GUILayout.Height(30)))
        {
            userSettings.meshFolder = EditorUtility.OpenFolderPanel("Tile Mesh Destination Folder", "", "");

            if (userSettings.meshFolder == "")
            {
                userSettings.meshFolder = "Assets/";
            }
        }

        EditorGUILayout.Space();

        EditorGUILayout.EndVertical();

        userSettings.meshFolder = YuTools_Utils.shortenAssetPath(userSettings.meshFolder);

        // ----------------------------------------------------------------------------------------------------
        // ------ Import Button
        // ----------------------------------------------------------------------------------------------------

        EditorGUILayout.Space();

        if (userSettings.sourceTiles != null)
        {
            if (GUILayout.Button("Import Tileset", GUILayout.Height(40)))
            {
                bool tileDestinationFolderWarning = true;
                bool meshDestinationFolderWarning = true;

                if (userSettings.destinationFolder == "Assets/")
                {
                    tileDestinationFolderWarning = EditorUtility.DisplayDialog("Tile Prefabs will be created in the root Assets Folder",
                                                                               "Are you sure you want create the tile prefabs in the root Asset/ folder?", "OK", "Cancel");
                }

                if (userSettings.meshFolder == "Assets/")
                {
                    meshDestinationFolderWarning = EditorUtility.DisplayDialog("New mesh data will be created in the root Assets Folder",
                                                                               "Are you sure you want create the new mesh data in the root Asset/ folder?", "OK", "Cancel");
                }

                if (tileDestinationFolderWarning && meshDestinationFolderWarning)
                {
                    refreshSourceTileObject();
                    createTemplateMaterial();
                    createTemplateTileObject();
                    setTileShadowOptions();
                    createTileSet();
                    revertScenePrefabs();
                    YuME_tileConverter.recreateCustomBrushes(userSettings.destinationFolder);
                    cleanUpImport();
                }
            }
        }
        else
        {
            EditorGUILayout.HelpBox("Set a Source Tile Object To Create Tile Set", MessageType.Warning);
        }

        // ----------------------------------------------------------------------------------------------------
        // ------ Output Folder Information
        // ----------------------------------------------------------------------------------------------------

        EditorGUILayout.Space();

        EditorGUILayout.BeginVertical("box");

        EditorGUILayout.LabelField("Tile Output Folder:", EditorStyles.boldLabel);
        EditorGUILayout.LabelField(userSettings.destinationFolder);

        EditorGUILayout.LabelField("Mesh Output Folder:", EditorStyles.boldLabel);
        EditorGUILayout.LabelField(userSettings.meshFolder);

        EditorGUILayout.EndVertical();

        EditorGUILayout.EndScrollView();

        // ----------------------------------------------------------------------------------------------------
        // ------ GUI Changed
        // ----------------------------------------------------------------------------------------------------

        if (GUI.changed)
        {
            if (userSettings.sourceMaterial != null)
            {
                userSettings.sourceTexture = userSettings.sourceMaterial.mainTexture;
            }

            EditorUtility.SetDirty(userSettings);
        }
    }