見出し画像

Unity : Dynamic texture tiling

はじめに

Unityでmaterialに設定されたtextureのtilingをdynamicに変更するためのtips.

環境

* MacBook Pro(Retina, 15-inch Mid 2015)
* Unity2018.2.2f1

How to

GitHubにscriptをupしました。
scriptから、material/textureを変更するには、以下のようにします。

Renderer renderer = GetComponent<Renderer> ();

Vector2 offset = new Vector2(...);
Vector2 scale = new Vector2(...);

renderer.material.SetTextureOffset("_MainTex", offset);
renderer.material.SetTextureScale("_MainTex", scale);
renderer.material.SetTextureOffset("_BumpMap", offset);
renderer.material.SetTextureScale("_BumpMap", scale);

が、以前の記事で紹介したように、Renderer.materialを変更すると、内部でマテリアルをコピーして作成し、その値を変更することになります。
同じマテリアルを使用しているObjectを全て変更したい場合、sharedMaterialを使います。メモリリークの心配もなくなるので、私としては、こちらを推奨します。

なお、GetComponent<Renderer>().sharedMaterial.color = Color.red; sharedMaterialはマテリアル自体の設定を変更しているので、シーンの実行を終了しても元に戻りません。ご注意ください。

実際のscriptは、GitHubにupされたsourceをご確認ください(非常に短いので、ご心配なく)

参考/URL

* UnityのMaterialのTilingやOffsetの値をスクリプトから変更する方法

もしよろしければ、サポートをお願いします! 頂いたサポートは、Creatorとしての活動費に充てさせて頂きます。