Esempio n. 1
0
    static void createTileSet(bool reImport)
    {
        updatedPrefabsCounter = 0;
        newPrefabsCounter     = 0;
        tileImportProgress    = 0f;

        tilesetData             = ScriptableObject.CreateInstance <YuME_tilesetData>();
        tilesetData.tileSetName = userSettings.c_name;

        GameObject[] sourcePrefabs;

        sourcePrefabs = YuTools_Utils.loadDirectoryContents(userSettings.c_sourceFolder, "*.prefab");

        if (sourcePrefabs.Length == 0)
        {
            sourcePrefabs = YuTools_Utils.loadDirectoryContents(userSettings.c_sourceFolder, "*.obj");
        }

        if (sourcePrefabs.Length == 0)
        {
            sourcePrefabs = YuTools_Utils.loadDirectoryContents(userSettings.c_sourceFolder, "*.fbx");
        }

        bool validTile = false;

        foreach (GameObject child in sourcePrefabs)
        {
            // display the conversion progress based on the number of tiles found on the source tile set
            EditorUtility.DisplayProgressBar("Building Tile Set", "Tile " + tileImportProgress + " / " + sourcePrefabs.Length + " being exported", (float)(tileImportProgress / sourcePrefabs.Length));

            validTile = convertPrefabNew(child.gameObject, child.name, reImport);

            if (!validTile)
            {
                Debug.Log("---- invalid Tile");
            }

            tileImportProgress++;
        }

        if (!AssetDatabase.IsValidFolder(userSettings.c_destinationFolder + "/CustomBrushes"))
        {
            AssetDatabase.CreateFolder(userSettings.c_destinationFolder, "CustomBrushes");
        }

        try
        {
            tilesetData.customBrushDestinationFolder = userSettings.c_destinationFolder + "/CustomBrushes";
            AssetDatabase.CreateAsset(tilesetData, userSettings.c_destinationFolder + "/" + userSettings.c_name + "_tileSet.asset");
        }
        catch
        {
            Debug.Log("Destination folder is invalid. Please select a different folder.");
        }

        AssetDatabase.SaveAssets();
        AssetDatabase.Refresh(); // refesh the asset database to tell unity changes have been made

        EditorUtility.ClearProgressBar();
    }
Esempio n. 2
0
    // ----------------------------------------------------------------------------------------------------
    // ----- Tileset functions for preview in the editor window
    // ----------------------------------------------------------------------------------------------------

    public static void importTileSets(bool fullRescan)
    {
        // find all assest of type YuME_tileSetData
        string[] guids = AssetDatabase.FindAssets("t:YuME_tileSetData");

        if (guids.Length > 0)
        {
            availableTileSets = new List <YuME_tilesetData>();

            foreach (string guid in guids)
            {
                YuME_tilesetData tempData = AssetDatabase.LoadAssetAtPath(AssetDatabase.GUIDToAssetPath(guid), typeof(YuME_tilesetData)) as YuME_tilesetData;

                if (fullRescan)
                {
                    EditorUtility.DisplayProgressBar("Reloading Tile Set: " + tempData.name, "Note: Reimport can take some time to complete", 0f);
                    string   path             = YuTools_Utils.getAssetPath(tempData);
                    string[] containedPrefabs = YuTools_Utils.getDirectoryContents(YuTools_Utils.getAssetPath(tempData), "*.prefab");

                    if (containedPrefabs != null)
                    {
                        foreach (string prefab in containedPrefabs)
                        {
                            AssetDatabase.ImportAsset(path + prefab);
                        }
                    }
                    if (tempData != null)
                    {
                        path             = YuTools_Utils.getAssetPath(tempData) + "CustomBrushes/";
                        containedPrefabs = YuTools_Utils.getDirectoryContents(YuTools_Utils.getAssetPath(tempData) + "CustomBrushes/", "*.prefab");

                        if (containedPrefabs != null)
                        {
                            foreach (string prefab in containedPrefabs)
                            {
                                AssetDatabase.ImportAsset(path + prefab);
                            }
                        }
                    }
                }

                availableTileSets.Add(tempData);
            }

            if (fullRescan)
            {
                EditorUtility.ClearProgressBar();
            }

            tileSetNames = new string[availableTileSets.Count];

            for (int i = 0; i < availableTileSets.Count; i++)
            {
                tileSetNames[i] = availableTileSets[i].tileSetName;
            }

            loadPreviewTiles();
        }
        else
        {
            Debug.Log("No tile sets have been created");
        }
    }
Esempio n. 3
0
    static void createTileSet()
    {
        tilesetData = ScriptableObject.CreateInstance <YuME_tilesetData>();

        scanNumberOfMeshesToConvert();

        foreach (Transform child in userSettings.sourceTiles.transform)
        {
            if (child.GetComponent <MeshFilter>() != null)
            {
                if (child.GetComponent <MeshFilter>().sharedMesh != null)
                {
                    // display the conversion progress based on the number of tiles found on the source tile set
                    EditorUtility.DisplayProgressBar("Building Tile Set", "Tile " + tileImportProgress + " / " + totalMeshesInSourceObject + " being exported", (float)(tileImportProgress / totalMeshesInSourceObject));

                    if (!userSettings.bypassCollisionSetup)
                    {
                        tileMeshCollider.sharedMesh = null; // reset the collision mesh for each conversion
                    }

                    if (!(child.name.Contains(userSettings.collisionIdentifier) || child.name.Contains(userSettings.customBoundsIdentifier)))
                    {
                        tileMeshFilter.sharedMesh = child.GetComponent <MeshFilter>().sharedMesh;

                        // Set the template gameobject name to the destination prefab name based in the object being imported
                        tileParentObject.name = userSettings.appendName + child.name;
                        tileParentObject.transform.localScale = child.transform.localScale;
                        tileMeshDataObject.name = userSettings.appendName + child.name + "Tile";

                        tileMeshFilter.sharedMesh.bounds = findCustomBoundsMesh(child.GetComponent <MeshFilter>().sharedMesh);

                        // recenter the source mesh so it's origin is 0,0.5,0
                        tileMeshFilter.sharedMesh = recenterMesh(child.GetComponent <MeshFilter>().sharedMesh);

                        tileMeshDataObject.transform.position = setTheTileMeshObjectOffsetFromTheParent(tileMeshFilter.sharedMesh.bounds.extents);

                        attachCustomCollisionMesh(); // check if the object has a custom collision mesh and perform setup

                        if (!tileParentObject.name.Contains(userSettings.altIdentifier))
                        {
                            // Try and load an exisiting version of the prefab
                            Object prefabAlreadyCreated = AssetDatabase.LoadAssetAtPath(userSettings.destinationFolder + "/" + userSettings.appendName + child.name + "_YuME.prefab", typeof(GameObject));

                            // Check if the prefab already exisits and update it - or create a new prefab
                            if (prefabAlreadyCreated != null)
                            {
                                updatedPrefabsCounter++; // increment the counter of updated prefabs for the finished log
#if UNITY_2018_3_OR_NEWER
                                PrefabUtility.SaveAsPrefabAssetAndConnect(tileParentObject, userSettings.destinationFolder + "/" + userSettings.appendName + child.name + "_YuME.prefab", InteractionMode.AutomatedAction);
#else
                                PrefabUtility.ReplacePrefab(tileParentObject, prefabAlreadyCreated, ReplacePrefabOptions.ReplaceNameBased); // replace the existing prefab with the updated data
#endif
                            }
                            else
                            {
                                newPrefabsCounter++; // increment the counter of new prefabs for the finished log
#if UNITY_2018_3_OR_NEWER
                                PrefabUtility.SaveAsPrefabAsset(tileParentObject, userSettings.destinationFolder + "/" + tileParentObject.name + "_YuME.prefab");
#else
                                PrefabUtility.CreatePrefab(userSettings.destinationFolder + "/" + tileParentObject.name + "_YuME.prefab", tileParentObject);
#endif
                            }

                            tilesetData.tileData.Add(userSettings.destinationFolder + "/" + tileParentObject.name + "_YuME.prefab");
                        }
                        else
                        {
                            string[] masterTileName = tileParentObject.name.Split(new string[] { userSettings.altIdentifier }, System.StringSplitOptions.None);
                            masterTileName[0] += "_YuME";

                            if (!AssetDatabase.IsValidFolder(userSettings.destinationFolder + "/" + masterTileName[0]))
                            {
                                AssetDatabase.CreateFolder(userSettings.destinationFolder, masterTileName[0]);
                            }

                            Object prefabAlreadyCreated = AssetDatabase.LoadAssetAtPath(userSettings.destinationFolder + "/" + masterTileName[0] + "/" + userSettings.appendName + child.name + "_YuME.prefab", typeof(GameObject));

                            // Check if the prefab already exisits and update it - or create a new prefab
                            if (prefabAlreadyCreated != null)
                            {
                                updatedPrefabsCounter++; // increment the counter of updated prefabs for the finished log
#if UNITY_2018_3_OR_NEWER
                                PrefabUtility.SaveAsPrefabAssetAndConnect(tileParentObject, userSettings.destinationFolder + "/" + masterTileName[0] + "/" + userSettings.appendName + child.name + "_YuME.prefab", InteractionMode.AutomatedAction);
#else
                                PrefabUtility.ReplacePrefab(tileParentObject, prefabAlreadyCreated, ReplacePrefabOptions.ReplaceNameBased); // replace the existing prefab with the updated data
#endif
                            }
                            else
                            {
                                newPrefabsCounter++; // increment the counter of new prefabs for the finished log
#if UNITY_2018_3_OR_NEWER
                                PrefabUtility.SaveAsPrefabAsset(tileParentObject, userSettings.destinationFolder + "/" + masterTileName[0] + "/" + tileParentObject.name + "_YuME.prefab");
#else
                                PrefabUtility.CreatePrefab(userSettings.destinationFolder + "/" + masterTileName[0] + "/" + tileParentObject.name + "_YuME.prefab", tileParentObject);
#endif
                            }

                            tilesetData.tileData.Add(userSettings.destinationFolder + "/" + masterTileName[0] + "/" + tileParentObject.name + "_YuME.prefab");
                        }

                        tileImportProgress++;
                    }
                }
            }
        }

        string[] tileSetDataName = userSettings.destinationFolder.Split('/');

        //Debug.Log(tileSetDataName[tileSetDataName.Length - 1]);

        tilesetData.customBrushDestinationFolder = userSettings.destinationFolder + "/CustomBrushes";

        if (!AssetDatabase.IsValidFolder(tilesetData.customBrushDestinationFolder))
        {
            AssetDatabase.CreateFolder(userSettings.destinationFolder, "CustomBrushes");
        }

        tilesetData.tileSetName = tileSetDataName[tileSetDataName.Length - 1];
        AssetDatabase.CreateAsset(tilesetData, userSettings.destinationFolder + "/" + tileSetDataName[tileSetDataName.Length - 1] + "_tileSet.asset");

        AssetDatabase.SaveAssets();
        AssetDatabase.Refresh(); // refesh the asset database to tell unity changes have been made

        EditorUtility.ClearProgressBar();
    }