Unity 5.1.0f3 Personal
プロパティをスクリプトから変更
例えばマテリアルの色を変える場合、以下のコードで行えます。
GetComponent<Renderer>().material.color = Color.red;
ただしこれは、_Color という名前でプロパティが設定されているシェーダにのみ有効です。
_Colorという名前以外の色を変える場合は以下のように行います
GetComponent<Renderer>().material.SetColor("_TintColor", Color.red);
第一引数にPropertiesの名前を指定しています。
同様にSetFloatやSetVectorなどを使う事で他のプロパティも変更できます。
プロパティの確認
プロパティは、マテリアル右上の歯車からSelect Shaderを選択し、
![]() |
下の方にあるPropertiesから確認できます。
![]() |
左側がプロパティの名前、右側が型になります。
プロパティが存在するか
プロパティの存在確認を行いたい場合はHasPropertyを使います。
if(GetComponent<Renderer>().material.HasProperty("_TintColor")){ GetComponent<Renderer>().material.SetColor("_TintColor", Color.red); }
上記の例では_TintColorというプロパティが設定されていれば、そのプロパティを変更しています。
------------追記------------
なお、StandardのEmissionなど、
一部の値はプロパティに載ってない(プロパティではない)ので、この方法では変更できません。
------------追記おわり------------
sharedMaterial
ここまでやってきたように、Renderer.materialを変更すると新たにマテリアルをコピーし、
その値を変更するため、他のオブジェクトのマテリアルは変更されてません。
同じマテリアルを使用しているもの全てについて
設定を変更したい場合は、sharedMaterialを使います。
GetComponent<Renderer>().sharedMaterial.color = Color.red;
同じマテリアルを使用したCubeを配置し、中央のマテリアルを変更した例が以下の通りです。
Renderer.materialを変更した場合
![]() |
Renderer.sharedMaterialを変更した場合
![]() |
sharedMaterialはマテリアル自体の設定を変更しているため、
シーンの実行を終了しても元に戻らない点に注意が必要です。
またsharedMaterialを使わないとマテリアルのコピーが発生し、使用するマテリアルが増えるため
Unity4だとDraw Calls、Unity5だとSetPass callsが増える点にも注意が必要です。