In the code below I search for a material with a specific name in my selection and replace it with supplied material.
My debug log reports a changed material name but in my view nothing happens and the object still has the same material.
Any clue whats wrong with my script?
public class SwitchMaterialsTest extends ScriptableWizard
{
var replaceMaterialName :String;
var newMaterial :Material;
new function OnGUI() :void
{
var allowSceneObjects : boolean = !EditorUtility.IsPersistent (this);
replaceMaterialName = EditorGUILayout.TextField("replace material name: ", replaceMaterialName);
newMaterial = EditorGUILayout.ObjectField("new material:", newMaterial, Material, allowSceneObjects);
if(GUILayout.Button("Replace"))
{
Replace();
}
}
@MenuItem("test/Switch Materials test")
static function Init() :void
{
var window :SwitchMaterialsTest = EditorWindow.GetWindow(SwitchMaterialsTest, false, "Material Switcher");
}
function Replace() :void
{
for (var item :GameObject in Selection.gameObjects)
{
// Grab all renderers in gameobjects and childs
var rRenderers = item.GetComponentsInChildren(Renderer);
for (var rRenderer :Renderer in rRenderers)
{
var materials = rRenderer.sharedMaterials;
for(var mat :Material in materials)
{
if(mat.name == replaceMaterialName)
{
mat = newMaterial;
Debug.Log(mat.name);
}
}
}
}
}
}