gologiusの巣

プログラミングなどの技術メモです。誰かの役に立てるとうれしいです。

Unityでオブジェクトのマテリアルを変更する話

Unityで動的にマテリアルを変更したい、的なことがしたい場合

GameObject obj = xxxxxx; //適当な読み込み
Material mtl = yyyy; //適当な読み込み

obj.GetComponent<Renderer>().material = mtl;

のようにするのですが、僕は勝手に

obj.GetComponent<Renderer>().material = mtl;

obj.GetComponent<Renderer>().materials[0] = mtl;

が同じ振る舞いをするものだと思っていました。

どうも違うみたいで、前者だと意図したふるまいになるのですが、後者の場合、以下の画像のようにDefault Materialが割り当てられてしまうみたいです。

f:id:gologius:20170527183941p:plain (MeshRendererの部分です)

どう違うのかはまた調査します