public static void backupSingleMaterial(Material m) { if (restoring_in_progress) { return; } string[] mats = new string[0]; if (!File.Exists(MATERIALS_BACKUP_FILE_PATH)) { File.CreateText(MATERIALS_BACKUP_FILE_PATH).Close(); } else { mats = Helper.ReadFileIntoString(MATERIALS_BACKUP_FILE_PATH).Split(new string[] { "\n" }, System.StringSplitOptions.None); } bool updated = false; string matGuid = AssetDatabase.AssetPathToGUID(AssetDatabase.GetAssetPath(m.GetInstanceID())); string newString = ""; for (int mat = 0; mat < mats.Length; mat++) { if (mats[mat].Contains(matGuid)) { updated = true; newString += matGuid + ":" + Helper.getDefaultShaderName(m.shader.name) + ":" + m.renderQueue + "\r\n"; } else { newString += mats[mat] + "\n"; } } if (!updated) { newString += matGuid + ":" + Helper.getDefaultShaderName(m.shader.name) + ":" + m.renderQueue; } else { newString = newString.Substring(0, newString.LastIndexOf("\n")); } Helper.WriteStringToFile(newString, MATERIALS_BACKUP_FILE_PATH); }
public static void backupAllMaterials() { if (restoring_in_progress) { return; } if (!File.Exists(MATERIALS_BACKUP_FILE_PATH)) { File.CreateText(MATERIALS_BACKUP_FILE_PATH).Close(); } EditorUtility.DisplayProgressBar("Backup materials", "", 0); StreamWriter writer = new StreamWriter(MATERIALS_BACKUP_FILE_PATH, false); string[] materialGuids = AssetDatabase.FindAssets("t:material"); for (int mG = 0; mG < materialGuids.Length; mG++) { Material material = AssetDatabase.LoadAssetAtPath <Material>(AssetDatabase.GUIDToAssetPath(materialGuids[mG])); writer.WriteLine(materialGuids[mG] + ":" + Helper.getDefaultShaderName(material.shader.name) + ":" + material.renderQueue); EditorUtility.DisplayProgressBar("Backup materials", "", (float)(mG + 1) / materialGuids.Length); } writer.Close(); EditorUtility.ClearProgressBar(); }
void OnGUI() { scrollPos = GUILayout.BeginScrollView(scrollPos); bool init = false; if (paths == null) { paths = new List <string>(); shaders = new List <Shader>(); differentQueueShaderPaths = new Dictionary <string, List <string> >(); string[] shaderGuids = AssetDatabase.FindAssets("t:shader"); for (int sguid = 0; sguid < shaderGuids.Length; sguid++) { string path = AssetDatabase.GUIDToAssetPath(shaderGuids[sguid]); Shader shader = AssetDatabase.LoadAssetAtPath <Shader>(path); if (!path.Contains("_differentQueues/")) { paths.Add(path); shaders.Add(shader); } else { List <string> differentQueueShaderPaths; this.differentQueueShaderPaths.TryGetValue(Helper.getDefaultShaderName(shader.name), out differentQueueShaderPaths); if (differentQueueShaderPaths == null) { differentQueueShaderPaths = new List <string>(); this.differentQueueShaderPaths.Add(Helper.getDefaultShaderName(shader.name), differentQueueShaderPaths); } differentQueueShaderPaths.Add(path); } } if (setEditor == null || setEditor.Length != shaderGuids.Length) { setEditor = new bool[paths.Count]; wasEditor = new bool[paths.Count]; } init = true; } for (int p = 0; p < paths.Count; p++) { if (init) { EditorUtility.DisplayProgressBar("Load all shaders...", "", (float)p / paths.Count); setEditor[p] = (new Material(shaders[p])).HasProperty(ThryEditor.PROPERTY_NAME_USING_THRY_EDITOR); wasEditor[p] = setEditor[p]; } setEditor[p] = GUILayout.Toggle(setEditor[p], shaders[p].name); } if (init) { EditorUtility.ClearProgressBar(); } GUILayout.EndScrollView(); if (GUILayout.Button("Apply")) { for (int i = 0; i < paths.Count; i++) { if (wasEditor[i] != setEditor[i]) { string path = paths[i]; ShaderImportFixer.scriptImportedAssetPaths.Add(path); if (setEditor[i]) { addThryEditor(path); } else { removeThryEditor(path); } List <string> differentQueueShaderPaths; this.differentQueueShaderPaths.TryGetValue(shaders[i].name, out differentQueueShaderPaths); if (differentQueueShaderPaths != null) { foreach (string queueShaderPath in differentQueueShaderPaths) { ShaderImportFixer.scriptImportedAssetPaths.Add(queueShaderPath); if (setEditor[i]) { addThryEditor(queueShaderPath); } else { removeThryEditor(queueShaderPath); } } } } wasEditor[i] = setEditor[i]; } AssetDatabase.Refresh(); ThryEditor.repaint(); } }
private void OnGUI() { if (poiShaders == null || reload) { string[] shaderGuids = AssetDatabase.FindAssets("t:shader"); List <string> poiShaders = new List <string>(); foreach (string g in shaderGuids) { Shader shader = AssetDatabase.LoadAssetAtPath <Shader>(AssetDatabase.GUIDToAssetPath(g)); Material m = new Material(shader); if (m.HasProperty(Shader.PropertyToID(ThryEditor.PROPERTY_NAME_USING_THRY_EDITOR))) { string defaultShaderName = Helper.getDefaultShaderName(shader.name); if (!poiShaders.Contains(defaultShaderName)) { poiShaders.Add(defaultShaderName); } } } this.poiShaders = new string[poiShaders.Count + 1]; for (int i = 0; i < poiShaders.Count; i++) { this.poiShaders[i + 1] = poiShaders[i]; } } GUILayout.Label("With thry editor the render queue selection in the material editor creates copies of the shader with different queues to make it work in vrchat. \n With this tool you can pre create those shader files so you don't have to wait."); Shader activeShader = Settings.activeShader; if (activeShader != null) { poiShaders[0] = Helper.getDefaultShaderName(activeShader.name); } else { poiShaders[0] = "None"; } int newSelectShader = EditorGUILayout.Popup(0, poiShaders, GUILayout.MaxWidth(200)); if (newSelectShader != selectedShader) { selectedShader = newSelectShader; activeShader = Shader.Find(poiShaders[newSelectShader]); Settings.setActiveShader(activeShader); } if (activeShader != null) { string defaultShaderName = Helper.getDefaultShaderName(activeShader.name);; Shader defaultShader = Shader.Find(defaultShaderName); GUIStyle style = new GUIStyle(GUI.skin.label); style.richText = true; EditorGUILayout.LabelField("<size=16>" + defaultShaderName + "</size>", style, GUILayout.MinHeight(18)); GUILayout.Label("Generate Render Queue Shaders", EditorStyles.boldLabel); GUILayout.BeginHorizontal(); if (GUILayout.Button("Generate All Queues", GUILayout.MaxWidth(200))) { for (int i = createShadersFrom; i <= createShadersTo; i++) { Helper.createRenderQueueShaderIfNotExists(defaultShader, i, false); } AssetDatabase.Refresh(); } GUILayout.Label("from", GUILayout.MaxWidth(30)); createShadersFrom = EditorGUILayout.IntField(createShadersFrom, GUILayout.MaxWidth(50)); GUILayout.Label("to", GUILayout.MaxWidth(15)); createShadersTo = EditorGUILayout.IntField(createShadersTo, GUILayout.MaxWidth(50)); GUILayout.EndHorizontal(); if (GUILayout.Button("Generate most common Queues", GUILayout.MaxWidth(200))) { foreach (int i in COMMON_QUEUES) { Helper.createRenderQueueShaderIfNotExists(defaultShader, i, false); } AssetDatabase.Refresh(); } } }