So my problem is that my game object changes half of its materials and the other half is not affected. I want to change all of it and I need to do it by accessing the object’s children. Any help would be appreciated.
Here is what I did so far…
var newMat : Material;
function Start() {
ChangeMaterial();
}
function ChangeMaterial() {
var children : Renderer[];
children = GetComponentsInChildren.<Renderer>();
for (var i : Renderer in children) {
i.material = newMat;
}
}
Fritsl
3
c# for the lazy :
void ChangeMaterial(Material newMat)
{
Renderer[] children;
children = GetComponentsInChildren<Renderer>();
foreach (Renderer rend in children)
{
var mats = new Material[rend.materials.Length];
for (var j = 0; j < rend.materials.Length; j++)
{
mats[j] = newMat;
}
rend.materials = mats;
}
}
Rereading your question, I’ll bet your meshes have more than one material assigned. You will need to cycle through and reset all the materials on the mesh. Try this (untested):
function ChangeMaterial(newMat : Material) {
var children : Renderer[];
children = GetComponentsInChildren.<Renderer>();
for (var rend : Renderer in children) {
var mats = new Material[rend.materials.Length];
for (var j = 0; j < rend.materials.Length; j++) {
mats[j] = newMat;
}
rend.materials = mats;
}
}
This code works but dont forget to add your parent game object name like.
void ChangeMaterial(Material newMat)
{
Renderer[] children;
GameObject parent;
children = parent.GetComponentsInChildren<Renderer>();
foreach (Renderer rend in children)
{
var mats = new Material[rend.materials.Length];
for (var j = 0; j < rend.materials.Length; j++)
{
mats[j] = newMat;
}
rend.materials = mats;
}
}