はじめに
ShaderLabのプロパティ属性をよく忘れてしまうので、備忘録もかねて属性を軽くまとめてみました。
空白を入れる
**[Space]**を使うことでフィールドの間に空間を挟むことができます。
Properties
{
_MainTex ("Texture", 2D) = "white" {}
[Space]
_A("A", Float) = 1.0
_B("B", Float) = 1.0
}
Spaceに数値を指定すると空間の幅を変えることができます。
Properties
{
_MainTex ("Texture", 2D) = "white" {}
[Space(100)]
_A("A", Float) = 1.0
_B("B", Float) = 1.0
}
TilingとOffsetを非表示にする
以下のようなプロパティを記述すると、インスペクターにテクスチャの設定フィールドが表示されます。
_MainTex ("Texture", 2D) = "white" {}
これに **[NoScaleOffset]**をつけると TilingとOffsetが非表示になります。
[NoScaleOffset] _MainTex ("Texture", 2D) = "white" {}
チェックボックスでパラメータを設定する
以下のようなプロパティを書いた場合、数値入力フィールドが表示されます。
_IsHoge ("Is Hoge", Float) = 0
**[MaterialToggle]**をつけるとパラメータをチェックボックスで設定できるようになります。
[MaterialToggle] _IsHoge ("Is Hoge", Float) = 0
チェックが入っているときは1が、入っていないときは0が設定されます。
参考: https://forum.unity3d.com/threads/shader-properties-no-bool-support.157580/
チェックボックスでシェーダーコードを切り替える
以下のようなコードをプロパティに記述するとインスペクター上からマクロが設定できるようになります。
[Toggle(FILL_WITH_RED)]
_Hoge("Fill With Red", Float) = 0
これを利用することで以下のようなシェーダーコードの切り替えが可能になります。
#ifdef FILL_WITH_RED
チェックボックスがONならこちらが実行される
#else
チェックボックスがOFFならこちらが実行される
#endif
#pragma shader_feature FILL_WITH_RED
と書いておく必要があります。
参考: https://gist.github.com/keijiro/22cba09c369e27734011
プロパティをインスペクター上で非表示
[HideInInspector] をつけるとプロパティが表示されなくなります。
[HideInInspector] _MainTex ("Texture", 2D) = "white" {}