自分だけのPropertyDrawerを作ろう！


Unity4には新機能として**PropertyDrawer**というものがあります。みなさんは普段スクリプトに

```cs:SampleScript.cs
using UnityEngine;
using System.Collections;

public class SampleScript : MonoBehaviour {
	
	public float hp;

	void Update()
	{
		Debug.Log( hp );
	}
}
```
と`public float hp;`を記述し、インスペクタ上で自由に編集を行なっていると思います。

例えばこの`hp`ですが、仮に自キャラのHPだとしましょう。
自キャラのHPがマイナスになって良いでしょうか？HPの上限を設定しなくて良いでしょうか？（そのようなゲームなら構いませんが…）

* 自キャラのHPがマイナスになってはいけない
* HPの上限は決まっている

上記の設定がすでにあるのであれば、開発の時点で考慮しておくべきです。
その考慮の1つとして**PropertyDrawer**を使用しましょう。
PropertyDrawerはAttributeがあることによって成り立つ機能になっています。


##Attributeを使う
上記の`HP`の話、つまり`HPの下限と上限を設定する`ということです。

結論から言うと

```cs:SampleScript.cs
using UnityEngine;

public class SampleScript : MonoBehaviour
{
	[Range2( 0f, 100f )]
	public float hp;
}

```

で実装が可能です。

`Range( float min , float max )`で下限と上限を決めているわけです。理解はすぐ出来ます。

これはUnityが事前に用意している**RangeAttribute**です。

今回はこの**RangeAttribute**を自作してみましょう。

##Attributeを作る
Attributeを作るには２つのファイルが必要です。

* Attibuteを定義するスクリプトファイル
* Propertyを描画するスクリプトファイル

まずは`Attibuteを定義するスクリプトファイル`を作成しましょう

###Attibuteを定義するスクリプトファイルの作成
早速、作成して行きましょう。**RangeAttribute**だと被ってしまうので**Range2Attribute**とします。

```cs:Range2Attribute.cs
using UnityEngine;

public class Range2Attribute : PropertyAttribute
{
	public float min;
	public float max;

	public Range2Attribute (float min, float max)
	{
		this.min = min;
		this.max = max;
	}
}

```
`PropertyAttribute`を継承した`Range2Attribute.cs`を作成します。
引数としてminとmaxを書くだけでなく、

* `public float min;`
* `public float max;`

も必ず記述するようにしましょう。これは次の`Propertyを描画するスクリプトファイル`で使用します。

###Propertyを描画するスクリプトファイル
さて、Attributeの定義が終わったら、次はインスペクターに描画するための`PropertyDrawer`を作成しましょう

```cs:Range2Drawer.cs
using UnityEngine;
using UnityEditor;

[CustomPropertyDrawer( typeof ( Range2Attribute ) )]
public class Range2Drawer : PropertyDrawer
{
	public override void OnGUI (Rect position, SerializedProperty property, GUIContent label)
	{
		Range2Attribute range2Attribute = (Range2Attribute)attribute;
		
		if (property.propertyType == SerializedPropertyType.Float) {
			EditorGUI.Slider (position, property, range2Attribute.min, range2Attribute.max, label);
		}
	}
}

```
`[CustomPropertyDrawer( typeof ( Range2Attribute ) )]`をつけ、**PropertyDrawer**を継承して下さい。そして`OnGUI`をオーバーライドします。`OnGUI`で描画するものがインスペクターに表示されます。
変数として`attribute`があるのでこれを`Range2Attribute`にキャストします。
次に`OnGUI`の引数として`property`が取得できます。これは**Attributeをつけているプロパティがシリアライズ化されたもの**です。

```cs:Range2AttributeExample.cs
using UnityEngine;

public class Range2AttributeExample : MonoBehaviour
{
	[Range2( 0f, 100f )]
	public float hp;
}

```
上記のコードだと`hp`がシリアライズ化されたプロパティとなります。

...話は`Range2Drawer.cs`に戻りますが、`position`が通常の描画で使用される（はずだった）Rect情報です。通常はこのpositionをそのまま使用して下さい。
`label`はプロパティ名や場合により画像が含まれています。今回は`Hp`の文字が`label`の中に格納されています。
そして、今回`RangeAttribute`で定義した`min`と`max`も上記の通りに使用することができます。
さて、これで必要な情報が揃いました。文字にすると大変ですね。

今回は`EditorGUI`クラスの`Slider`を使用してスライダーを描画します。詳しい使い方はドキュメントを見ていただくとして...

以上で完成です。お疲れ様でした。
さて、次は動作を確認してみましょう。

###作ったAttributeを試す

```cs:Range2AttributeExample.cs
using UnityEngine;

public class Range2AttributeExample : MonoBehaviour
{
	[Range2( 0f, 100f )]
	public float hp;
}

```

`Range2AttributeExample.cs`を適当なGameObjectにアタッチして下さい。
すると、以下の画像のようなスライダーが表示されるはずです。
![](data:image/png;base64,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hgBj09PT4UZtbW0kI9JZF74+XRw/fjxCtLVVVb701GBFxbBxN+zKOwjmguKKvIKdJf4N5eWl2a0zZk3/o+XsDxw48LLLLhPtotWsWbP4ZYAffvihHXmnFOzQoUM9evSABXrVqqoqyvUSBdeGcI6hHUUVT6zI3VkUoLxvh4xV0wZktarX0lFjxs6fO7uRCvbMM89Id8FgMDc3d8WKFZbDViQ1Hpg+fXrLli3pBfPx+eefb926VXAS7j722GNE56+88oq++KRcTaoO65Tcd999GLnPPvuMwmuuuQY4QgWzQ6gjB1ZcAoaYF154wVAh7q+RjwLhu/322/fu3Xvs2LHx48f36dMHClmfL168+Ndffz0jYTrr7CoLlzp27Dh27NiFCxfW1NTY1VTlHl+qvyRQXVPtCoW65bQZM7gHn5Zv2F1wLLvWVbdr2zZLMWMsK1euRMGo/Mknn/B700038Ushnyyb8PWUgiE3fr8/OzubUvVQosuTKgdABGvr3NM/+qVlmm/F1P59O2QSK9INnaFjoTPFpjoqOxht37x583fffTd06FBcM47U0pfaNY+hHB1GGpCAqVOnjhs3bufOndXV1eDp1auXeLZLL70UegTzE088cfDgwffee49XHVb9Ct9feukl7JQqjBCwRGjZFi7t2rVr1apVll/PbiETh5H9/vvv/9DwvP/++7/88kubNm3OqAYRsk5x6eeff+7fvz+aHwkfPD5fcUkAq+0PVIy6vOs7X+xAbieN6j33g01uj4eJRubRGJ110MO6S7Tr448/huF8pRVCgoHbtGkTTsxSx04pGA2OHDnSunVrde6MbFGid6PDtaHQ5iOleUWlq+8bfGG7FmjUn1funNSn48q9x6/qkjWyR1u9cswwXDh69CjjueSSSxgkeLBY06ZNIyRADVCGd999FzqffPLJ7du3Q/yFF164b9++t99+G/3HlcNxWvHpoosuggXUZ6JHjhzJPmd+fv6yZcsM5oMKdEFbQkTws4YUBYOz69evByGzKAoGEkSH7h566CHUXsGvvvoqxKCZQuG8efMww1u2bFmzZo0wgfm76667unbtun//fohnVh5++GFwbtiw4eKLL77hhhuWLFmCPusIw9MMWogsLi4W/Pyed955t912G52uXbuWcK5Dhw50ZMc3vDSRGPTs3r0bTbjlllugkOX7jh07QCVjwewq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)

おめでとうございます。これであなたはエディタ拡張(プロパティ拡張？)を行いました。
エディタ拡張の世界へようこそ！

##TIPS
今回作ったような`Range2Attribute`なら別にいいのですが、アイデアによって

* **処理時間のかかるAttributeを作成したい**

という場合があると思います。良いですね。処理がかかるけど素晴らしいAttributeを作成しているんでしょうね。

処理時間のかかるAttributeを作成する注意点として、

* `PropertyDrawer`の処理はインスペクターの描画処理と同時に行われるため、`PropertyDrawer`の描画処理が終わるまでインスペクターは描画されない。

という点に注意して下さい。
3秒かかる処理だとインスペクターは3秒間表示されずユーザーは待つ必要があります。
これで困ることは、`Transform`や他のコンポーネントの情報を見たいのに待たないと見れない。という点です。

なので

```cs:SampleAttribute.cs
using UnityEngine;

public class SampleAttribute : PropertyAttribute
{
	public bool init = false;
	
	public SampleAttribute ()
	{
		
	}
}
```

```cs:SampleDrawer.cs
using UnityEngine;
using UnityEditor;

[CustomPropertyDrawer(typeof(SampleAttribute))]
public class SampleDrawer : PropertyDrawer
{

	public override void OnGUI (Rect position, SerializedProperty property, GUIContent label)
	{
		if (sampleAttribute.init == false) {
			sampleAttribute.init = true;
			return;
		}


		...


	}
	
	public override float GetPropertyHeight (SerializedProperty property, GUIContent label)
	{
		if (sampleAttribute.init == false) {
			return 0;
		}
		
		return base.GetPropertyHeight (property, label);
	}
}
```
Attributeにbool属性のプロパティを追加して初回のみすぐreturnさせるようにします。
これで、とりあえず、インスペクターが表示されます。
Attributeの実際の処理は2回目以降行われるということですね。

`GetPropertyHeight`はインスペクターで確保するGUIの高さです。


以上、**自分だけのAttributeを作ろう！**でした！