コガネブログ

平日更新を目標に Unity や C#、Visual Studio、ReSharper などのゲーム開発アレコレを書いていきます

【Unity】シェーダを実装する時に MaterialPropertyDrawer を使用して Inspector の表示をカスタマイズする

はじめに

シェーダを実装する時に MaterialPropertyDrawer を使用することで
Inspector の表示をカスタマイズすることができます

MaterialPropertyDrawer は自作することができますが
今回は Unity が標準で用意しているモノをいくつか紹介していきます

Toggle

[Toggle(RED)] _Invert("Red ?" , Float) = 0
  • float 値を 1 と 0 で切り替えるチェックボックスを表示します
  • シェーダキーワードの有効/無効を切り替えることも可能です

f:id:baba_s:20170927141936g:plain

Enum

[Enum(ZERO, 0, HALF, 128, FULL, 255)] _Red("Red", Int) = 128
  • float 値を選択できるポップアップメニューを表示します
  • 列挙型の名前を指定するか、表示名と値のペアをカンマ区切りで設定することで使用します
  • 表示名と値のペアを指定する場合、最大 7 つまで指定できます

f:id:baba_s:20170927142000p:plain

KeywordEnum

[KeywordEnum(RED, GREEN, BLUE)] _Mode("Color Type", Float) = 0
  • 有効化したいシェーダキーワードをポップアップメニューから選択できます
  • シェーダキーワードは大文字の「【プロパティ名】_【表示名】」で有効になります
  • シェーダキーワードは最大 9 つまで指定できます

f:id:baba_s:20170927142030p:plain

PowerSlider

[PowerSlider(2.5)] _Red("Red", Range(0, 1)) = 1
  • 非線形のカーブに従って値を設定するスライダーを表示します

f:id:baba_s:20170927142049g:plain

IntRange

[IntRange] _Red("Red", Range(0, 255)) = 128
  • 指定された範囲の値を設定できる int 型のスライダーを表示します

f:id:baba_s:20170927142115g:plain

Space

  • シェーダプロパティの上部にスペースを導入します
_Red("Red", Float) = 0
[Space] _Green("Green", Float) = 0
[Space(50)] _Blue("Blue", Float) = 0

f:id:baba_s:20170927142218p:plain

Header

  • シェーダプロパティの上部にヘッダーテキストを表示します
[Header(Color 1)] 
_Red1("Red 1", Float) = 0
_Green1("Green 1", Float) = 0
_Blue1("Blue 1", Float) = 0

[Header(Color 2)] 
_Red2("Red 2", Float) = 0
_Green2("Green 2", Float) = 0
_Blue2("Blue 2", Float) = 0

f:id:baba_s:20170927142159p:plain

関連記事