言語: 日本語
  • C#
  • JS
  • Boo

スクリプト言語

お好みのスクリプト言語を選択すると、サンプルコードがその言語で表示されます。

MaterialPropertyDrawer

Namespace: UnityEditor

Suggest a change

Success!

Thank you for helping us improve the quality of Unity Documentation. Although we cannot accept all submissions, we do read each suggested change from our users and will make updates where applicable.

Close

Sumbission failed

For some reason your suggested change could not be submitted. Please try again in a few minutes. And thank you for taking the time to help us improve the quality of Unity Documentation.

Close

Cancel

Description

プロパティ Drawer の派生元ベースクラス

これを使用して自身のマテリアルプロパティのためのカスタム UI Drawer を、カスタムの MaterialEditor クラスを記述することなく、作成できます。このクラスは PropertyDrawer がカスタムのインスペクタを記述することなくカスタム UI を可能にする方法に似ています。 シェーダ コードでは C# のような属性の文法を、シェーダ プロパティの前に使用して Drawer を追加できます。Unity には幾つかのビルトインの Drawer があり、自身で記述することも出来ます。次に文法を示すシェーダ コードのスニペットを示します:

        Shader "Custom/Example" {
	Properties {
		_MainTex ("Base (RGB)", 2D) = "white" {}

		// Display a popup with None,Add,Multiply choices,
		// and setup corresponding shader keywords.
		[KeywordEnum(None, Add, Multiply)] _Overlay ("Overlay mode", Float) = 0

		_OverlayTex ("Overlay", 2D) = "black" {}

		// Display as a toggle.
		[Toggle] _Invert ("Invert color?", Float) = 0
	}
	// rest of shader code...
}

自身の Drawer を実装するとき、OnGUI 関数をオーバーライドすべきです。さらにGetPropertyHeight および Apply 関数のオーバーライドするオプションがあります。次のサンプルでは、プロパティ Drawer により float プロパティのチェックボックスを表示したうえ、状態にもとづき値を 0 または 1 にセットします。

// The property drawer class should be placed in an editor script, inside a folder called Editor.

// Use with "[MyToggle]" before a float shader property
class MyToggleDrawer extends MaterialPropertyDrawer {

	// Draw the property inside the given rect
	function OnGUI (position : Rect, prop : MaterialProperty, label : String, editor : MaterialEditor) {

		// Setup
		EditorGUI.BeginChangeCheck ();
		var value : boolean = prop.floatValue != 0.0f;
		EditorGUI.showMixedValue = prop.hasMixedValue;

		// Show the toggle control
		value = EditorGUI.Toggle (position, label, value);

		EditorGUI.showMixedValue = false;
		if (EditorGUI.EndChangeCheck ()) {
			// Set the new value if it has changed
			prop.floatValue = value ? 1.0f : 0.0f;
		}
	}
}
no example available in C#
no example available in Boo

ビルトインの MaterialPropertyDrawer は: ToggleDrawer, EnumDrawer, KeywordEnumDrawer, PowerSliderDrawer。シェーダ コードでは、クラス名の末尾の "Drawer" 修飾子は異彩されません。Unity が Drawer クラスを検索したとき、自動的に "Drawer" を付加します。 Toggle により float をトグルとして表示します。プロパティの値はトグルの状態により 0 または 1 となります。有効であるときシェーダ キーワードで大文字のプロパティ名 + "_ON" 、または明示的に指定されたシェーダ キーワードがセットされます。

// Will set "_INVERT_ON" shader keyword when set
[Toggle] _Invert ("Invert?", Float) = 0

// Will set "ENABLE_FANCY" shader keyword when set
[Toggle(ENABLE_FANCY)] _Fancy ("Fancy?", Float) = 0

Enum により float プロパティにポップアップ メニューを表示します。列挙体の型名(望ましいのは、複数の型がある場合を想定して完全修飾された名前空間)、または明示的な名前 / 値のペアを指定できます。最大で 7 つの名前 / 値のペアを指定できます。

// Blend mode values
[Enum(UnityEngine.Rendering.BlendMode)] _Blend ("Blend mode", Float) = 1

// A subset of blend mode values, just "One" (value 1) and "SrcAlpha" (value 5)
[Enum(One,1,SrcAlpha,5] _Blend2 ("Blend mode subset", Float) = 1

KeywordEnum により float プロパティにポップアップ メニューを表示して、対応するシェーダ キーワードを有効化します。これはシェーダにおいて、シェーダ コードの一部を有効化 / 無効化するために "#pragma multi_compile" とともに使用されます。 各々の名前は大文字で "プロパティ名" + "_" + "列挙体名" のシェーダ キーワードを有効化します。最大で 9 つの名前を指定できます。

// Display a popup with None,Add,Multiply choices.
// Each option will set _OVERLAY_NONE, _OVERLAY_ADD, _OVERLAY_MULTIPLY shader keywords.
[KeywordEnum(None, Add, Multiply)] _Overlay ("Overlay mode", Float) = 0

// ...later on in CGPROGRAM code:
#pragma multi_compile _OVERLAY_NONE, _OVERLAY_ADD, _OVERLAY_MULTIPLY
// ...

PowerSlider により Range シェーダ プロパティに対する線形でない反応曲線のスライダーを表示します。

// A slider with 3.0 response curve
[PowerSlider(3.0)] _Shininess ("Shininess", Range (0.01, 1)) = 0.08

パフォーマンス理由により、 EditorGUILayout 関数は MaterialPropertyDrawer と共に使用できません。 See Also: MaterialProperty クラス

Functions

Apply マテリアルに追加の初期値を適用します
GetPropertyHeight GUI の高さを指定するにはこのメソッドのプロパティをピクセル単位でオーバーライドします
OnGUI このメソッドをオーバーライドしてプロパティに自身の GUI を作成します