はじめに

ShaderLabのプロパティ属性をよく忘れてしまうので、備忘録もかねて属性を軽くまとめてみました。

空白を入れる

[Space]を使うことでフィールドの間に空間を挟むことができます。

Spaceサンプル
Properties
{
    _MainTex ("Texture", 2D) = "white" {}
    [Space]
    _A("A", Float) = 1.0
    _B("B", Float) = 1.0
}

image.png



Spaceに数値を指定すると空間の幅を変えることができます。

Spaceに数値を指定するサンプル
Properties
{
    _MainTex ("Texture", 2D) = "white" {}
    [Space(100)]
    _A("A", Float) = 1.0
    _B("B", Float) = 1.0
}

image.png

TilingとOffsetを非表示にする

以下のようなプロパティを記述すると、インスペクターにテクスチャの設定フィールドが表示されます。

サンプル
_MainTex ("Texture", 2D) = "white" {}

image.png


これに [NoScaleOffset]をつけると TilingとOffsetが非表示になります

NoScaleOffsetサンプル
[NoScaleOffset] _MainTex ("Texture", 2D) = "white" {}

image.png

チェックボックスでパラメータを設定する

以下のようなプロパティを書いた場合、数値入力フィールドが表示されます。

サンプル
_IsHoge ("Is Hoge", Float) = 0

image.png

[MaterialToggle]をつけるとパラメータをチェックボックスで設定できるようになります。

MaterialToggleサンプル
[MaterialToggle] _IsHoge ("Is Hoge", Float) = 0 

image.png

チェックが入っているときは1が、入っていないときは0が設定されます。

参考: https://forum.unity3d.com/threads/shader-properties-no-bool-support.157580/

チェックボックスでシェーダーコードを切り替える

以下のようなコードをプロパティに記述するとインスペクター上からマクロが設定できるようになります。

マクロ設定サンプル
[Toggle(FILL_WITH_RED)]
_Hoge("Fill With Red", Float) = 0

image.png

これを利用することで以下のようなシェーダーコードの切り替えが可能になります。

シェーダーコードを切り替えるサンプル
#ifdef FILL_WITH_RED
    チェックボックスがONならこちらが実行される
#else
    チェックボックスがOFFならこちらが実行される
#endif

#pragma shader_feature FILL_WITH_RED と書いておく必要があります。

参考: https://gist.github.com/keijiro/22cba09c369e27734011

プロパティをインスペクター上で非表示

[HideInInspector] をつけるとプロパティが表示されなくなります。

HideInInspectorサンプル
[HideInInspector] _MainTex ("Texture", 2D) = "white" {}

参考: https://unity3d.com/jp/unity/whats-new/unity-4.1