【Unity】1つのオブジェクトに複数のマテリアルがある時の変更できない!のを解決する方法

GameObject objにMeshRendererとSkinnedMeshRendererのマテリアルが複数ある場合にResourceにあるマテリアルに変更したい時

var mat = Resources.Load<Material>("Materials/mat");
for (int i = 0; i < obj.GetComponent<SkinnedMeshRenderer>().materials.Length; i++)
	{
	    obj.GetComponent<SkinnedMeshRenderer>().materials[i] = mat;
	}

これでいけそうな気がするがこれだと変更できない
正しくは

var mat = Resources.Load<Material>("Materials/mat");
var mats = obj.GetComponent<SkinnedMeshRenderer>().materials;
for (int i = 0; i < obj.GetComponent<SkinnedMeshRenderer>().materials.Length; i++)
    {
        mats[i] = mat;
	}
obj.GetComponent<SkinnedMeshRenderer>().materials = mats;

これで変更できる
一回別のマテリアルの配列を作ってその配列を変更してさらにそれを戻す必要がある。
なんでこんなややこしい仕様なのかさっぱりわからんけどこうしないと変更できない

この記事が気に入ったらサポートをしてみませんか?