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; } } } } }
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; } } }
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; } }