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(); }
// ---------------------------------------------------------------------------------------------------- // ----- 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"); } }
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(); }