続きです dhero.hatenablog.com
今回参考にするページはこちら nn-hokuson.hatenablog.com
スクリプトから色を設定する
こちらはそのままです。
Shader "Custom/sample" { SubShader { Tags { "RenderType"="Opaque" } LOD 200 CGPROGRAM #pragma surface surf Standard fullforwardshadows #pragma target 3.0 struct Input { float2 uv_MainTex; }; //変数の宣言 fixed4 _BaseColor; void surf (Input IN, inout SurfaceOutputStandard o) { o.Albedo = _BaseColor.rgb; //代入 } ENDCG } FallBack "Diffuse" }
GetComponent<Renderer> ().material.SetColor ("_BaseColor", Color.black);
C#のscript側で呼ぶと色が変わります。なんとなくでやっていた
GetComponent<Renderer> ().material.SetColor ("_EmissionColor", Color.black);
とかはこういう仕組みだったんですね。
ちなみにどんなプロパティがあるかについてはDebugモードに切り替えてあげることで見る事ができます。
一方のノード側では、右クリック->Create Node->Colorの手順でノードを作成し、
ColorのoutとAlbedoをドラッグして繋げてやれば先でやったのと同じことになります。
インスペクタから色を設定する
こちらも元サイトからそのまま。Propertiesのブロックが増えます。
Propertiesのブロックに書かれた変数はインスペクタから操作が可能になります。
Shader "Custom/sample" { Properties{ _BaseColor ("Base Color", Color) = (1,1,1,1) } SubShader { Tags { "RenderType"="Opaque" } LOD 200 CGPROGRAM #pragma surface surf Standard fullforwardshadows #pragma target 3.0 struct Input { float2 uv_MainTex; }; fixed4 _BaseColor; void surf (Input IN, inout SurfaceOutputStandard o) { o.Albedo = _BaseColor.rgb; } ENDCG } FallBack "Diffuse" }
では、ノード側
PropertiesのAddをクリックし、Colorを選択します。
分かりやすいようにShaderで宣言した変数名と同じ_BaseColorという名前にしました。
先ほど作ったColorのノードはいらないので、選択してdelキーで削除してしまいます。
そして新しく、Create NodeからPropertyを作成し、同じようにoutとAlbedoを繋いであげます。
Propertyを展開すると、Propertyで宣言した_BaseColorがでるのでクリックします。
最後にSaveしてインスペクタを見てみます。
すると設定の項目に_BaseColorが追加されているのが確認できると思います。
以上ノードでインスペクタに変数を追加する方法でした。今回はColorでしたが、floatやTextureなども同じ手順でノンコーディングで変数を追加し、インスペクタに表示することができます。 あとなぜかノードで作成したShaderだとスクリプトからの変数の変更がきかないので、これは後で調査しますー。