コード例 #1
0
        public static void Upgrade(Material material, MaterialUpgrader upgrader, UpgradeFlags flags)
        {
            var upgraders = new List <MaterialUpgrader>();

            upgraders.Add(upgrader);
            Upgrade(material, upgraders, flags);
        }
コード例 #2
0
        public void Upgrade(Material material, UpgradeFlags flags)
        {
            Material newMaterial;

            if ((flags & UpgradeFlags.CleanupNonUpgradedProperties) != 0)
            {
                newMaterial = new Material(Shader.Find(m_NewShader));
            }
            else
            {
                newMaterial        = UnityEngine.Object.Instantiate(material) as Material;
                newMaterial.shader = Shader.Find(m_NewShader);
            }

            Convert(material, newMaterial);

            material.shader = Shader.Find(m_NewShader);
            material.CopyPropertiesFromMaterial(newMaterial);
            UnityEngine.Object.DestroyImmediate(newMaterial);

            if (m_Finalizer != null)
            {
                m_Finalizer(material);
            }
        }
コード例 #3
0
        public static void UpgradeSelection(List <MaterialUpgrader> upgraders, string progressBarName, UpgradeFlags flags = UpgradeFlags.None)
        {
            var selection = Selection.objects;

            if (selection == null)
            {
                EditorUtility.DisplayDialog(DialogText.title, DialogText.noSelectionMessage, DialogText.ok);
                return;
            }

            List <Material> selectedMaterials = new List <Material>(selection.Length);

            for (int i = 0; i < selection.Length; ++i)
            {
                Material mat = selection[i] as Material;
                if (mat != null)
                {
                    selectedMaterials.Add(mat);
                }
            }

            int selectedMaterialsCount = selectedMaterials.Count;

            if (selectedMaterialsCount == 0)
            {
                EditorUtility.DisplayDialog(DialogText.title, DialogText.noSelectionMessage, DialogText.ok);
                return;
            }

            if (!EditorUtility.DisplayDialog(DialogText.title, string.Format("The upgrade will overwrite {0} selected material{1}. ", selectedMaterialsCount, selectedMaterialsCount > 1 ? "s" : "") +
                                             DialogText.projectBackMessage, DialogText.proceed, DialogText.cancel))
            {
                return;
            }

            string lastMaterialName = "";

            for (int i = 0; i < selectedMaterialsCount; i++)
            {
                if (UnityEditor.EditorUtility.DisplayCancelableProgressBar(progressBarName, string.Format("({0} of {1}) {2}", i, selectedMaterialsCount, lastMaterialName), (float)i / (float)selectedMaterialsCount))
                {
                    break;
                }

                var material = selectedMaterials[i];
                Upgrade(material, upgraders, flags);
                if (material != null)
                {
                    lastMaterialName = material.name;
                }
            }

            UnityEditor.EditorUtility.ClearProgressBar();
        }
コード例 #4
0
        public static void Upgrade(Material material, List <MaterialUpgrader> upgraders, UpgradeFlags flags)
        {
            if (material == null)
            {
                return;
            }

            var upgrader = GetUpgrader(upgraders, material);

            if (upgrader != null)
            {
                upgrader.Upgrade(material, flags);
            }
            else if ((flags & UpgradeFlags.LogMessageWhenNoUpgraderFound) == UpgradeFlags.LogMessageWhenNoUpgraderFound)
            {
                Debug.Log(string.Format("{0} material was not upgraded. There's no upgrader to convert {1} shader to selected pipeline", material.name, material.shader.name));
            }
        }
コード例 #5
0
        /// <summary>
        /// Upgrade the selection.
        /// </summary>
        /// <param name="upgraders">List of upgraders.</param>
        /// <param name="progressBarName">Name of the progress bar.</param>
        /// <param name="flags">Material Upgrader flags.</param>
        public static void UpgradeSelection(List <MaterialUpgrader> upgraders, string progressBarName, UpgradeFlags flags = UpgradeFlags.None)
        {
            HashSet <string> shaderNamesToIgnore = new HashSet <string>();

            UpgradeSelection(upgraders, shaderNamesToIgnore, progressBarName, flags);
        }
コード例 #6
0
        public static void UpgradeProjectFolder(List <MaterialUpgrader> upgraders, string progressBarName, UpgradeFlags flags = UpgradeFlags.None)
        {
            if (!EditorUtility.DisplayDialog(DialogText.title, "The upgrade will overwrite materials in your project. " + DialogText.projectBackMessage, DialogText.proceed, DialogText.cancel))
            {
                return;
            }

            int totalMaterialCount = 0;

            foreach (string s in UnityEditor.AssetDatabase.GetAllAssetPaths())
            {
                if (IsMaterialPath(s))
                {
                    totalMaterialCount++;
                }
            }

            int materialIndex = 0;

            foreach (string path in UnityEditor.AssetDatabase.GetAllAssetPaths())
            {
                if (IsMaterialPath(path))
                {
                    materialIndex++;
                    if (UnityEditor.EditorUtility.DisplayCancelableProgressBar(progressBarName, string.Format("({0} of {1}) {2}", materialIndex, totalMaterialCount, path), (float)materialIndex / (float)totalMaterialCount))
                    {
                        break;
                    }

                    Material m = UnityEditor.AssetDatabase.LoadMainAssetAtPath(path) as Material;
                    Upgrade(m, upgraders, flags);

                    //SaveAssetsAndFreeMemory();
                }
            }

            UnityEditor.EditorUtility.ClearProgressBar();
        }
コード例 #7
0
        /// <summary>
        /// Upgrade a material.
        /// </summary>
        /// <param name="material">Material to upgrade.</param>
        /// <param name="upgraders">List of Material upgraders.</param>
        /// <param name="flags">Material upgrader flags.</param>
        /// <param name="message">Error message to be outputted when no material upgraders are suitable for given material if the flags <see cref="UpgradeFlags.LogMessageWhenNoUpgraderFound"/> is used.</param>
        /// <return>Returns true if the upgrader was found for the passed in material.</return>
        public static bool Upgrade(Material material, List <MaterialUpgrader> upgraders, UpgradeFlags flags, ref string message)
        {
            if (material == null)
            {
                return(false);
            }

            var upgrader = GetUpgrader(upgraders, material);

            if (upgrader != null)
            {
                upgrader.Upgrade(material, flags);
                return(true);
            }
            if ((flags & UpgradeFlags.LogMessageWhenNoUpgraderFound) == UpgradeFlags.LogMessageWhenNoUpgraderFound)
            {
                message =
                    $"{material.name} material was not upgraded. There's no upgrader to convert {material.shader.name} shader to selected pipeline";
                return(false);
            }

            return(true);
        }
コード例 #8
0
        /// <summary>
        /// Upgrade a material.
        /// </summary>
        /// <param name="material">Material to upgrade.</param>
        /// <param name="upgraders">List of Material upgraders.</param>
        /// <param name="flags">Material Upgrader flags.</param>
        public static void Upgrade(Material material, List <MaterialUpgrader> upgraders, UpgradeFlags flags)
        {
            string message = String.Empty;

            if (Upgrade(material, upgraders, flags, ref message))
            {
                return;
            }

            if (!string.IsNullOrEmpty(message))
            {
                Debug.Log(message);
            }
        }
コード例 #9
0
        /// <summary>
        /// Upgrade the project folder.
        /// </summary>
        /// <param name="upgraders">List of upgraders.</param>
        /// <param name="shaderNamesToIgnore">Set of shader names to ignore.</param>
        /// <param name="progressBarName">Name of the progress bar.</param>
        /// <param name="flags">Material Upgrader flags.</param>
        public static void UpgradeProjectFolder(List <MaterialUpgrader> upgraders, HashSet <string> shaderNamesToIgnore, string progressBarName, UpgradeFlags flags = UpgradeFlags.None)
        {
            if ((!Application.isBatchMode) && (!EditorUtility.DisplayDialog(DialogText.title, "The upgrade will overwrite materials in your project. " + DialogText.projectBackMessage, DialogText.proceed, DialogText.cancel)))
            {
                return;
            }

            int totalMaterialCount = 0;

            foreach (string s in UnityEditor.AssetDatabase.GetAllAssetPaths())
            {
                if (IsMaterialPath(s))
                {
                    totalMaterialCount++;
                }
            }

            int materialIndex = 0;

            foreach (string path in UnityEditor.AssetDatabase.GetAllAssetPaths())
            {
                if (IsMaterialPath(path))
                {
                    materialIndex++;
                    if (UnityEditor.EditorUtility.DisplayCancelableProgressBar(progressBarName, string.Format("({0} of {1}) {2}", materialIndex, totalMaterialCount, path), (float)materialIndex / (float)totalMaterialCount))
                    {
                        break;
                    }

                    Material m = UnityEditor.AssetDatabase.LoadMainAssetAtPath(path) as Material;

                    if (!ShouldUpgradeShader(m, shaderNamesToIgnore))
                    {
                        continue;
                    }

                    Upgrade(m, upgraders, flags);

                    //SaveAssetsAndFreeMemory();
                }
            }

            // Upgrade terrain specifically since it is a builtin material
            if (Terrain.activeTerrains.Length > 0)
            {
                Material terrainMat = Terrain.activeTerrain.materialTemplate;
                Upgrade(terrainMat, upgraders, flags);
            }

            UnityEditor.EditorUtility.ClearProgressBar();
        }
コード例 #10
0
        public static void Upgrade(Material material, List <MaterialUpgrader> upgraders, UpgradeFlags flags)
        {
            var upgrader = GetUpgrader(upgraders, material);

            if (upgrader != null)
            {
                upgrader.Upgrade(material, flags);
            }
        }
コード例 #11
0
        public static void UpgradeSelection(List <MaterialUpgrader> upgraders, string progressBarName, UpgradeFlags flags = UpgradeFlags.None)
        {
            var selection = Selection.objects;

            if (!EditorUtility.DisplayDialog("Material Upgrader", string.Format("The upgrade will overwrite {0} selected material{1}. ", selection.Length, (selection.Length > 1) ? "s" : "") +
                                             projectBackMessage, "Proceed", "Cancel"))
            {
                return;
            }

            string lastMaterialName = "";

            for (int i = 0; i < selection.Length; i++)
            {
                if (UnityEditor.EditorUtility.DisplayCancelableProgressBar(progressBarName, string.Format("({0} of {1}) {2}", i, selection.Length, lastMaterialName), (float)i / (float)selection.Length))
                {
                    break;
                }

                var material = selection[i] as Material;
                Upgrade(material, upgraders, flags);
                if (material != null)
                {
                    lastMaterialName = material.name;
                }
            }

            UnityEditor.EditorUtility.ClearProgressBar();
        }