Avatarにオブジェクトを入れるEditorを作る｜VRC用の拡張Editorを作ってみよう(2)

この記事は前回の続きになります
[VRC用の拡張Editorを作ってみよう(1)](https://qiita.com/Milcia/items/c967253233a20a028b62)

#目次
1.オブジェクトを入れる変数とObjectFieldを作成する
2.オブジェクトを入れるためのメソッドを定義して処理を書く
3.ボタンを押したらメソッドを呼び出すようにする
4.動作確認をする
5.次回

#1.オブジェクトを入れる変数とObjectFieldを作成する
##変数を作る
__private__な__GameObjectタイプ__の__gameObject__変数をグローバルな変数として宣言するためにメソッド外で宣言します
今回もOnGUIの上で作成します

```c#
private VRCAvatarDescriptor avatar;
private GameObject gameObject;
private void OnGUI()
{
```

変数ができるとこのようになります

##ObjectFieldを作る
前回と同じ__ObjectFieldを使って__作っていきます
こんな感じになりました

```c#
gameObject = EditorGUILayout.ObjectField("gameObject", gameObject, typeof(GameObject), true) as GameObject;
```

これをAvatarの下に書き加えていきます

```c#
private void OnGUI()
{
	avatar = EditorGUILayout.ObjectField("Avatar", avatar, typeof(VRCAvatarDescriptor), true) as VRCAvatarDescriptor;
	gameObject = EditorGUILayout.ObjectField("gameObject", gameObject, typeof(GameObject), true) as GameObject;
}
```

これで変数とObjectFieldはできました

#2.オブジェクトを入れるためのメソッドを定義して処理を書く
##メソッドを定義する
後から何度も呼び出せるように、メソッドを作っていきます
今回は__private__な__戻り値無し__のメソッドを作ります
メソッド名は何でもいいのですが今回は__InsertObject__にしました
__OnGUIの下__に書いていきます

```c#
private void InsertObject()
{
		
}
```

これでメソッドの定義ができました

##メソッドの中に処理を書く
オブジェクトを入れるための処理を書いていきます
今回は__Transform.SetParent__を使用します
書き方はこのようになります

```c#
"子ゲームオブジェクト".transform.SetParent("親ゲームオブジェクト".transform);
```

今回はこうなりました

```c#
gameObject.transform.SetParent(avatar.transform);
```

これをメソッドの中に書き加えていきます

```c#
private void InsertObject()
{
	gameObject.transform.SetParent(avatar.transform);
}
```

これでメソッドはできました

#3.ボタンを押したらメソッドを呼び出すようにする
##ボタンを作る
まずはボタンを作っていきます
今回は__GUILayout.Button__を使用します
書き方はこのようになります

```c#
GUILayout.Button("ボタンの名前")
```

__このままではボタンが機能しないのでボタンにif文を追加します__

```c#
if(GUILayout.Button("ボタンの名前"))
{

}
```

ボタンの名前は何でもいいので私は__"オブジェクトを入れる"__にしました
これをOnGUIに書き加えていきます

```c#
private void OnGUI()
{
	avatar = EditorGUILayout.ObjectField("Avatar", avatar, typeof(VRCAvatarDescriptor), true) as VRCAvatarDescriptor;
	gameObject = EditorGUILayout.ObjectField("gameObject", gameObject, typeof(GameObject), true) as GameObject;
	if (GUILayout.Button("オブジェクトを入れる"))
	{
			
	}
}
```

これでボタンは完成しました

##メソッドを呼び出す
メソッドを呼び出すには__メソッド名(引数の値)__と書きます
これをボタンのif文の中に書き加えていきます
今回は引数の値を渡さないのでこうなります

```c#
if (GUILayout.Button("オブジェクトを入れる"))
{
	InsertObject();
}
```

これでボタンを押したときにメソッドが呼び出されるようになりました

#4.動作確認をする
##Editorの確認
今作ったスクリプトをCtrl + Sで__保存__しましょう
保存ができたらEditorを開きます
Editorが開くとObjectFieldが二つ、ボタンが一つあると思います
![Editor2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2286080/281f8c47-ef91-dce7-e84d-63142eda6dd8.png)
ない場合はスクリプトを見直してみてくださいね

##Editorが機能するか確認する
まずはじめに__VRCAvatarDescriptorが入ったAvatarオブジェクト__と__入れたいGameObject__を用意しましょう
![hierarchy.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2286080/3e447d85-5fc0-c923-7b7b-77fb16ce36e3.png)
用意ができたらEditorに入れてみましょう
![Editor4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2286080/777aab29-ecc8-7626-8721-676d98518265.png)
入ったら__オブジェクトを入れる__ボタンを押します
![avatarobject.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2286080/d3523255-ce5f-19a5-ceb8-2beb601c16ce.png)
Avatarの子にGameObjectが入っていたらEditorの完成です
お疲れさまでした

#5.次回
次回はAvatarのコンポーネントを取得しようと思います

VRC用の拡張Editorを作ってみよう(3)
https://qiita.com/Milcia/items/68491d554fb0fcc9a04c