Created
January 16, 2020 10:14
-
-
Save zaki/12429733eed6c4963135a0f68d275be5 to your computer and use it in GitHub Desktop.
Clear unused properties left in the materials after changing shaders
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System.Text; | |
using UnityEngine; | |
using UnityEditor; | |
namespace Friday.Utilities | |
{ | |
public class ClearShaderProperties : EditorWindow | |
{ | |
private Material m_selectedMaterial; | |
private SerializedObject m_serializedObject; | |
[MenuItem("Friday/Material Cleanup")] | |
private static void MaterialCleanup() | |
{ | |
var materials = AssetDatabase.FindAssets("t:material"); | |
foreach (var guid in materials) | |
{ | |
Cleanup(guid); | |
} | |
} | |
private static void Cleanup(string guid) | |
{ | |
Material mat = AssetDatabase.LoadAssetAtPath<Material>(AssetDatabase.GUIDToAssetPath(guid)); | |
SerializedObject so = new SerializedObject(mat); | |
var props = new[] {"m_Floats", "m_Colors", "m_TexEnvs"}; | |
var m = "m_SavedProperties."; | |
bool hasChanged = false; | |
StringBuilder sb = new StringBuilder(); | |
foreach (string prop in props) | |
{ | |
SerializedProperty sp = so.FindProperty($"m_SavedProperties.{prop}"); | |
if (sp != null && sp.isArray) | |
{ | |
for (int i = sp.arraySize - 1; i >= 0; --i) | |
{ | |
string propName = sp.GetArrayElementAtIndex(i).displayName; | |
if (!mat.HasProperty(propName)) | |
{ | |
sp.DeleteArrayElementAtIndex(i); | |
sb.Append($"\t{sp.name} / {propName}\n"); | |
hasChanged = true; | |
} | |
} | |
} | |
} | |
if (hasChanged) | |
{ | |
so.ApplyModifiedProperties(); | |
Debug.Log($"Updating {mat.name}\n\nDeleted property list:\n{sb}"); | |
} | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment