public override void OnInspectorGUI() { DrawDefaultInspector(); if (GUILayout.Button("Write variant collection")) { ShaderVariantWriter settings = target as ShaderVariantWriter; settings.Write(); AssetDatabase.SaveAssets(); } }
void Write() { file = new StreamWriter("ShaderSources.txt"); ShaderVariantWriter settings = target as ShaderVariantWriter; Debug.Assert(settings.output != null); ShaderVariantCollection collection = settings.output; collection.Clear(); shaders = new Dictionary <Shader, List <string> >(); exclude = new HashSet <Renderer>(); seenObjects = new HashSet <GameObject>(); internalShaders = new HashSet <string>(new string[] { "Hidden/InternalErrorShader", "Hidden/VideoDecodeAndroid", "GUI/Text Shader" }); shaderKeywords = new Dictionary <Shader, List <HashSet <string> > >(); foreach (string shaderName in settings.additionalHiddenShaders) { Shader shader = Shader.Find(shaderName); if (shader == null) { Debug.LogErrorFormat( "Could not find shader '{0}'", shaderName); } else { AddShader(shader, "additional hidden shaders"); } } foreach (Shader shader in settings.additionalShaders) { AddShader(shader, "additional shaders"); } foreach (Material material in settings.additionalMaterials) { AddMaterial(material, "additional materials"); } foreach (GameObject prefab in settings.additionalPrefabs) { AddObjectShaders(prefab, "additional prefabs"); } if (settings.scene != null) { Scene scene = EditorSceneManager.OpenScene( AssetDatabase.GetAssetPath( settings.scene)); if (scene.IsValid()) { foreach (GameObject root in scene.GetRootGameObjects()) { AddMeshBakeRenderersToExclusionList(root); } foreach (GameObject root in scene.GetRootGameObjects()) { AddObjectShaders(root, "scene object"); } } } foreach (var entry in shaders) { foreach (Variant wantedVariant in settings.wantedVariants) { AddVariations(collection, entry.Key, wantedVariant, entry.Value); } } file.Close(); file = null; }