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