URPでmainTextureScaleを変更するときはSetTextureScaleを使う【Unity】

July 15, 2020, 9:50 a.m. edited Aug. 7, 2020, 8:24 a.m.

#URP  #Unity 

従来のBuilt-in Render PipelineではマテリアルのTilingを変更するとき、

material.mainTextureScale = new Vector2(2, 3);

のようにすることでできました1。しかし、Universal Render Pipeline (URP) でSimple Lit Shaderを使うとき、このように書くと

Material doesn't have a texture property '_BaseColor'
UnityEngine.Material:set_mainTextureScale(Vector2)
Property (_BaseColor) already exists. Use SetTexture instead.
UnityEngine.Material:set_mainTextureScale(Vector2)

とエラーが出てしまいます。

解決方法

material.SetTextureScale("_BaseMap", new Vector2(2, 3));

のように明示的に "_BaseMap" を指定することで動作します。

他にも、offsetを変えるときも似たようにしてやる必要があるそうです(https://forum.unity.com/threads/kinda-solved-cant-change-texture-offset-via-script-in-urp.741044/#post-5537335)。


  1. GetComponent<Renderer>().material を呼び出したら Destroy するのを忘れずに(ドキュメントにも書いてある)。