Custom Material Editors のサンプルを作ってみた
Unity - Custom Material Editors
http://docs.unity3d.com/Documentation/Components/SL-CustomMaterialEditors.html
公式のドキュメントのこのサンプルを作成してみました。
実行してみると Material を選択した時にこの様に拡張されていました。「Redify material」の部分が拡張された所です。
このチェックボックスにチェックが付いている状態ではこの様なレンダリング結果になります。
チェックが外れている状態ではこの様なレンダリング結果になります。
チェックが付いている時は緑と青の色が暗くなり、赤が強調されたレンダリング結果に成っているのが確認できるかと思います。
Custom Material Editors ではこの様に Inspector で Shader の内容を切り替える機能拡張を行えます。
コード
【CustomMaterialInspector.cs】
using System.Collections.Generic; using UnityEngine; using UnityEditor; using System.Linq; public class CustomMaterialInspector : MaterialEditor { public override void OnInspectorGUI () { // render the default inspector base.OnInspectorGUI (); // if we are not visible... return if (!isVisible) return; // get the current keywords from the material Material targetMat = target as Material; string[] keyWords = targetMat.shaderKeywords; // see if redify is set, then show a checkbox // Material の Shader に キーワード (定数) REDIFY_ON が存在するかを bool で取得 bool redify = keyWords.Contains ("REDIFY_ON"); EditorGUI.BeginChangeCheck (); // ここの記述が Inspector に反映される。今回は「Redify material」という名前のトグル(bool)のデータ redify = EditorGUILayout.Toggle ("Redify material", redify); if (EditorGUI.EndChangeCheck ()) { // if the checkbox is changed, reset the shader keywords // チェックボックスの状態でShader内のキーワード (定数)を REDIFY_ON にするか REDIFY_OFF にするかを切り替える var keywords = new List<string> { redify ? "REDIFY_ON" : "REDIFY_OFF"}; targetMat.shaderKeywords = keywords.ToArray (); EditorUtility.SetDirty (targetMat); } } }
【RedifyShader.shader】
Shader "Custom/Redify" { Properties { _MainTex ("Base (RGB)", 2D) = "white" {} } SubShader { Tags { "RenderType"="Opaque" } LOD 200 CGPROGRAM #pragma surface surf Lambert #pragma multi_compile REDIFY_ON REDIFY_OFF sampler2D _MainTex; struct Input { float2 uv_MainTex; }; void surf (Input IN, inout SurfaceOutput o) { half4 c = tex2D (_MainTex, IN.uv_MainTex); o.Albedo = c.rgb; o.Alpha = c.a; #if REDIFY_ON o.Albedo.gb = (o.Albedo.g + o.Albedo.b) / 2.0; #endif } ENDCG } FallBack "Diffuse" CustomEditor "CustomMaterialInspector" }
以下の部分で CustomMaterialInspector.cs と関連付けられています。
CustomEditor "CustomMaterialInspector"
関連情報
Unity - ShaderLab syntax: CustomEditor
http://docs.unity3d.com/Documentation/Components/SL-CustomEditor.html