LoginSignup
39
21

More than 5 years have passed since last update.

【Unity】ShaderLabのプロパティ属性まとめ

Last updated at Posted at 2017-07-06

はじめに

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

39
21
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
39
21