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