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;
		}
}

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;
         }
     }