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