private static void LoadXML(XmlElement materialEditorElement)
        {
            if (materialEditorElement == null)
            {
                return;
            }
            var shaderElements = materialEditorElement.GetElementsByTagName("Shader");

            foreach (var shaderElementObj in shaderElements)
            {
                if (shaderElementObj != null)
                {
                    var    shaderElement = (XmlElement)shaderElementObj;
                    string shaderName    = shaderElement.GetAttribute("Name");

                    if (LoadedShaders.ContainsKey(shaderName))
                    {
                        Destroy(LoadedShaders[shaderName].Shader);
                        LoadedShaders.Remove(shaderName);
                    }
                    var shader = LoadShader(shaderName, shaderElement.GetAttribute("AssetBundle"), shaderElement.GetAttribute("Asset"));
                    LoadedShaders[shaderName] = new ShaderData(shader, shaderName, shaderElement.GetAttribute("RenderQueue"), shaderElement.GetAttribute("ShaderOptimization"));

                    XMLShaderProperties[shaderName] = new Dictionary <string, ShaderPropertyData>();
                    var shaderPropertyElements = shaderElement.GetElementsByTagName("Property");
                    foreach (var shaderPropertyElementObj in shaderPropertyElements)
                    {
                        if (shaderPropertyElementObj != null)
                        {
                            var shaderPropertyElement = (XmlElement)shaderPropertyElementObj;

                            string             propertyName   = shaderPropertyElement.GetAttribute("Name");
                            ShaderPropertyType propertyType   = (ShaderPropertyType)Enum.Parse(typeof(ShaderPropertyType), shaderPropertyElement.GetAttribute("Type"));
                            string             defaultValue   = shaderPropertyElement.GetAttribute("DefaultValue");
                            string             defaultValueAB = shaderPropertyElement.GetAttribute("DefaultValueAssetBundle");
                            string             range          = shaderPropertyElement.GetAttribute("Range");
                            string             min            = null;
                            string             max            = null;
                            if (!range.IsNullOrWhiteSpace())
                            {
                                var rangeSplit = range.Split(',');
                                if (rangeSplit.Length == 2)
                                {
                                    min = rangeSplit[0];
                                    max = rangeSplit[1];
                                }
                            }
                            ShaderPropertyData shaderPropertyData = new ShaderPropertyData(propertyName, propertyType, defaultValue, defaultValueAB, min, max);

                            XMLShaderProperties["default"][propertyName]  = shaderPropertyData;
                            XMLShaderProperties[shaderName][propertyName] = shaderPropertyData;
                        }
                    }
                }
            }
        }
예제 #2
0
        private void LoadXML(XElement materialEditorElement)
        {
            if (materialEditorElement == null)
            {
                return;
            }

            foreach (var shaderElement in materialEditorElement.Elements("Shader"))
            {
                string shaderName = shaderElement.Attribute("Name").Value;

                if (LoadedShaders.ContainsKey(shaderName))
                {
                    Destroy(LoadedShaders[shaderName].Shader);
                    LoadedShaders.Remove(shaderName);
                }
                LoadedShaders[shaderName] = new ShaderData(shaderName, shaderElement.Attribute("AssetBundle")?.Value, shaderElement.Attribute("RenderQueue")?.Value, shaderElement.Attribute("Asset")?.Value);

                XMLShaderProperties[shaderName] = new Dictionary <string, ShaderPropertyData>();

                foreach (XElement element in shaderElement.Elements("Property"))
                {
                    string             propertyName   = element.Attribute("Name").Value;
                    ShaderPropertyType propertyType   = (ShaderPropertyType)Enum.Parse(typeof(ShaderPropertyType), element.Attribute("Type").Value);
                    string             defaultValue   = element.Attribute("DefaultValue")?.Value;
                    string             defaultValueAB = element.Attribute("DefaultValueAssetBundle")?.Value;
                    string             range          = element.Attribute("Range")?.Value;
                    string             min            = null;
                    string             max            = null;
                    if (!range.IsNullOrWhiteSpace())
                    {
                        var rangeSplit = range.Split(',');
                        if (rangeSplit.Length == 2)
                        {
                            min = rangeSplit[0];
                            max = rangeSplit[1];
                        }
                    }
                    ShaderPropertyData shaderPropertyData = new ShaderPropertyData(propertyName, propertyType, defaultValue, defaultValueAB, min, max);

                    XMLShaderProperties["default"][propertyName]  = shaderPropertyData;
                    XMLShaderProperties[shaderName][propertyName] = shaderPropertyData;
                }
            }
        }
예제 #3
0
        private void SetupShaderDropdown()
        {
            properties.Clear();

            bool isSelf = targetProperty.FindPropertyRelative("targetIsSelf").boolValue;

            if (isSelf)
            {
                renderer = targetProperty.FindPropertyRelative("selfTarget").objectReferenceValue as Renderer;
            }
            else
            {
                renderer = targetProperty.FindPropertyRelative("otherTarget").objectReferenceValue as Renderer;
            }

            if (renderer == null)
            {
                return;
            }

            if (renderer.sharedMaterial == null)
            {
                return;
            }

            shader = renderer.sharedMaterial.shader;
            int propertyCount = ShaderUtil.GetPropertyCount(shader);

            for (int i = 0; i < propertyCount; i++)
            {
                if (ShaderUtil.IsShaderPropertyHidden(shader, i))
                {
                    continue;
                }

                ShaderUtil.ShaderPropertyType shaderPropertyType =
                    ShaderUtil.GetPropertyType(shader, i);

                if (shaderPropertyType == TexEnv)
                {
                    continue;
                }

                ShaderPropertyData data =
                    new ShaderPropertyData(
                        ShaderUtil.GetPropertyName(shader, i),
                        shaderPropertyType.ToString());

                if (shaderPropertyType == Range)
                {
                    data.range = GetLimits(shader, i);
                }

                properties.Add(data);
            }

            if (selected.intValue >= properties.Count)
            {
                selected.intValue = 0;
            }
        }