強火で進め このページをアンテナに追加 RSSフィード

整理された情報は こちら へどうぞ。

2013年03月15日

[][] Custom Material Editors のサンプルを作ってみた

Unity - Custom Material Editors

http://docs.unity3d.com/Documentation/Components/SL-CustomMaterialEditors.html

公式のドキュメントのこのサンプルを作成してみました。

実行してみると Material を選択した時にこの様に拡張されていました。「Redify material」の部分が拡張された所です。

f:id:nakamura001:20130316015507p:image

このチェックボックスにチェックが付いている状態ではこの様なレンダリング結果になります。

f:id:nakamura001:20130316015905p:image

チェックが外れている状態ではこの様なレンダリング結果になります。

f:id:nakamura001:20130316015911p:image

チェックが付いている時は緑と青の色が暗くなり、赤が強調されたレンダリング結果に成っているのが確認できるかと思います。

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

投稿したコメントは管理者が承認するまで公開されません。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト

コメントを書くには、なぞなぞ認証に回答する必要があります。

トラックバック - http://d.hatena.ne.jp/nakamura001/20130315/1363367215
リンク元