Unityにて、
- UniversalRP
- ShaderGraph
この2つを使った描画の検証をしています。
ShaderGraphで書いたシェーダに外からテクスチャをスクリプトで渡す際に軽くつまづいたので共有します。
作っているもの
カラーテクスチャとマスクテクスチャを渡したマスクシェーダを作っています。
以下の合成後の状態を作るシェーダです。
カラーテクスチャ | マスク | 合成後 |
---|---|---|
![]() |
![]() |
![]() |
ShaderGraph
右上のBackboard
から公開プロパティの設定をします。
拡大すると以下。
+
ボタンからプロパティは作れますが、その時につける名前がスクリプトから参照できるキーだと思ってのですが、違いました。
Referenceがスクリプト参照キー
調査した結果、Referenceがスクリプトから参照できるプロパティ名でした。上のキャプチャでは、以下のコードでテクスチャをセットできます。
material.SetTexture("Texture2D_AD98B9C2C", _texture);
Referenceの自動で生成されるっぽい名前がスクリプトから参照できる名前のようです。
ちなみに、最初リネームできることに気づかなくて、_MainTex
を定義したいのに定義できない!という事にハマりました。
キャプチャのようにReferenceの文字列を_MainTex
にリネームして解決しています。
検証環境
- Unity2019.4.0f1
余談
今回のシェーダがuGUIのRawImageで使うシェーダだったのですが、_MainTexプロパティが存在しないと以下のエラーが出ます。
Material doesn't have a texture property '_MainTex' UnityEngine.Canvas:SendWillRenderCanvases()
以上です。