読者です 読者をやめる 読者になる 読者になる

テラシュールブログ

旧テラシュールウェアブログUnity記事。主にUnityのTipsやAR・VR、ニコニコ動画についてのメモを残します。

【Unity】マテリアルのInspector表示を拡張するエディタ拡張

Materialの、正確にはShaderInspectorを拡張するエディタ拡張についてです。
下のように、マテリアルの設定について情報を追加したり、入力内容を整理したりすることが可能になります。

Shaderのエディタ拡張

マテリアルのエディタを拡張する機能は、Custom Material Editorsを使用します。
この機能は、Monobehaviourの拡張のようにマテリアルに表示するInspector表現をスクリプトで書き換えることが出来るようになる機能です。

Custom Material Editorは、大雑把な手順としては以下の3つです。

  1. Editorフォルダ内にスクリプトを作成し、Inspectorに表示される内容を記述
  2. シェーダーと上のスクリプトを関連付けする
  3. スクリプトからマテリアルのプロパティを変更可能にする

実際にやってみます。

簡単なShaderのエディタ拡張

手順1と手順2を行います。
まずはマテリアルに表示される内容について記述します。
ここに書いている内容は、「内容を何も表示しない」、定義だけの内容です。
なおEditorフォルダ内に配置しないと動きません。また、通常のエディタ拡張と異なりクラス名と名前が一致しないと動きません。

gist.github.com

f:id:tsubaki_t1:20160108033725j:plain

次にシェーダーと上記のスクリプトを関連付けします。
やり方は単純で、CustomEditor "クラス名" と指定すれば関連付けられます。

gist.github.com

後はマテリアルにシェーダーを割り当てれば、拡張したマテリアルのInspectorを確認することが出来ます。今回はUIの中身を何も定義していないので、「何も書いてない」内容が表示されればOKです。

f:id:tsubaki_t1:20160108033933j:plain

マテリアルのエディタ拡張に色々と追記する

 OnInspectorGUI の中身を定義します。

物によっては、設定を自動化したり、表示したくない項目を表示から外したり、設定する項目を特定フォルダの下から選択したりと色々と使いやすく出来ます。
一応、base.OnInspectorGUI()で元々表示されてたInspectorを表示出来ます。

基本的な連携

まずは最低限、マテリアルに値を設定可能にします。

f:id:tsubaki_t1:20160108111858j:plain

gist.github.com

選択中のマテリアルはMaterialEditorのtargetに格納されているので、target経由でマテリアルにアクセスすることが出来ます。型がObjectなのでプロパティ定義してやると使いやすいです。

マテリアルから値を取得する際は、Inspectorに表示されているAlbedo (RGB)ではなく、_MainTexの方を使用する事に注意してください。定義はShaderから確認する事が出来ます。

f:id:tsubaki_t1:20160108112126j:plain

高度な表現

少し応用で、通常操作しないような項目は折りたたみます。

f:id:tsubaki_t1:20160108112306j:plain

f:id:tsubaki_t1:20160108112313j:plain

gist.github.com

もう一つ、事前にTextureを設定しておきボタン一つで切り替えます。

f:id:tsubaki_t1:20160108220930g:plain

gist.github.com

取得するTextureは、エディタのスクリプトに設定します。ここでテクスチャを設定してもビルド時には含まれないので安心です。

f:id:tsubaki_t1:20160108221235j:plain

参考

d.hatena.ne.jp