デコシノニッキ

デコシノニッキ

ホロレンジャーの戦いの記録

独習ShaderGraph その2 色を設定する

続きです 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モードに切り替えてあげることで見る事ができます。
f:id:haikage1755:20180114195410p:plain:w350

一方のノード側では、右クリック->Create Node->Colorの手順でノードを作成し、
f:id:haikage1755:20180114195835p:plain:w350
ColorのoutとAlbedoをドラッグして繋げてやれば先でやったのと同じことになります。
f:id:haikage1755:20180114200022p:plain:w350

インスペクタから色を設定する

こちらも元サイトからそのまま。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を選択します。
f:id:haikage1755:20180114200739p:plain:w350

分かりやすいようにShaderで宣言した変数名と同じ_BaseColorという名前にしました。
f:id:haikage1755:20180114204037p:plain:w350

先ほど作ったColorのノードはいらないので、選択してdelキーで削除してしまいます。
f:id:haikage1755:20180114201041p:plain:w350

そして新しく、Create NodeからPropertyを作成し、同じようにoutとAlbedoを繋いであげます。
f:id:haikage1755:20180114201205p:plain:w350

Propertyを展開すると、Propertyで宣言した_BaseColorがでるのでクリックします。
f:id:haikage1755:20180114204118p:plain:w350

最後にSaveしてインスペクタを見てみます。 すると設定の項目に_BaseColorが追加されているのが確認できると思います。
f:id:haikage1755:20180114204222p:plain:w350

以上ノードでインスペクタに変数を追加する方法でした。今回はColorでしたが、floatやTextureなども同じ手順でノンコーディングで変数を追加し、インスペクタに表示することができます。 あとなぜかノードで作成したShaderだとスクリプトからの変数の変更がきかないので、これは後で調査しますー。

[デコシノニッキ]は、Amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイト宣伝プログラムである、Amazonアソシエイト・プログラムの参加者です。」