Skip to content

Instantly share code, notes, and snippets.

@strich
Last active August 29, 2015 14:06
Show Gist options
  • Select an option

  • Save strich/aa334756346bd17cc6c4 to your computer and use it in GitHub Desktop.

Select an option

Save strich/aa334756346bd17cc6c4 to your computer and use it in GitHub Desktop.
public class BulkShaderSwapWindow : MonoBehaviour {
public Shader oldShader;
public Shader newShader;
[MenuItem("WFTO/Bulk Asset Modifier/Bulk Shader Swap")]
static void Init() {
BulkShaderSwapWindow window = EditorWindow.GetWindowWithRect(typeof(BulkShaderSwapWindow), new Rect(0, 0, 165, 100));
window.Show();
}
void OnGUI() {
EditorGUILayout.BeginHorizontal();
oldShader = EditorGUILayout.ObjectField("Old Shader", oldShader, typeof(Shader), true);
EditorGUILayout.EndHorizontal();
EditorGUILayout.BeginHorizontal();
newShader = EditorGUILayout.ObjectField("New Shader", newShader, typeof(Shader), true);
EditorGUILayout.EndHorizontal();
if (GUILayout.Button("Swap Shader"))
if (oldShader == null || newShader == null)
.ShowNotification(new GUIContent("No Shader added for swapping!"));
else
SwapShader();
}
private void SwapShader() {
var assets = GetAssetsOfType<Object>(".prefab");
Debug.Log(assets.Length + " prefabs found.");
int materialCounter = 0;
foreach (var assetObject in assets) {
GameObject assetGO = assetObject as GameObject;
if (assetGO == null)
continue;
List<Renderer> renderers = new List<Renderer>();
renderers.AddRange(assetGO.GetComponentsInChildren<Renderer>(true));
foreach (var renderer in renderers) {
materialCounter++;
if(renderer.material.shader == oldShader)
renderer.material.shader = newShader;
}
}
Debug.Log(materialCounter + " materials modified.");
AssetDatabase.SaveAssets();
AssetDatabase.Refresh();
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment