Editor拡張でPlayerSettingの値をいじる

Editor拡張練習がてらにPlayerSettingでいちいち変更していたアプリ名などの項目を、独自のウィンドウを作り、そこから編集できるようにしたい。

#UnityEditor拡張基礎
unityでは独自でエデッターウィンドウを作成することがでます。そのためにはまず**「Editor」フォルダ**をUnityプロジェクトのAsset下に作らなければなりません。そして、Editorフォルダの中にスクリプトを入れて、初めて機能します。
> Asset
>> Scene
>> Script
>> Editor
>>> **ここにいれる**

今回はPlayerSettingの値をいじるので、PlayerSettingという名前でc#スクリプトを作ります。


```ruby:PlayerSetting.cs
using UnityEngine;
using UnityEditor;
using System.Collections;
using System.Collections.Generic;
using System.IO;

public class PlayerSetting : EditorWindow
{
	[MenuItem("KitouSpecial/BuildSetting")]
	static void Open()
	{
		EditorWindow.GetWindow<PlayerSetting>( "PlayerSetting" );
	}
		
	void OnGUI()
	{
		GUI.skin.label.fontSize = 24;
		GUILayout.Label("PlayerSetting");
		GUI.skin.label.fontSize = 0;
	}
}
```

エディッターウィンドウを使うので、EditorWindowクラスを使います。
MenuItemで、Unityのツールバーに項目を増やすことができます。この場合は
<img width="708" alt="スクリーンショット 2016-10-22 14.13.03.png" src="https://qiita-image-store.s3.amazonaws.com/0/143839/b0e0df11-79aa-0abf-1381-3477310adb38.png">

こういう風になりますね

次にopen関数ですが、これはウィンドウが開いたときに一回だけ呼ばれる関数です。start関数と似ています。その中のEditorWindow.GetWindowで、ウィンドウの名前を指定することができます。

だいたい分かるとは思いますがOnGUI関数はそのままエディッターウィンドウのなかを作っていきます
fontSizeはこの後の文字の大きさを変えることができます。大きさを戻すのを忘れないようにしましょう。
GUILayout.Labelで文字を書き出すことができます。この場合は題名を書いてます。

#文字入力

では、ウィンドウに文字を入力できるようにしたいと思います。
適当にstring変数を作り、TextFieldを作り文字を入力できようにします。

```ruby:PlayerSetting.cs
using UnityEngine;
using UnityEditor;
using System.Collections;
using System.Collections.Generic;
using System.IO;

public class PlayerSetting : EditorWindow
{
	string productName;//商品名
	string companyName;//会社名
	string bundleVersion;//バージョン
	string bundleIdentifier;// パッケージ名

	[MenuItem("KitouSpecial/BuildSetting")]
	static void Open()
	{
		EditorWindow.GetWindow<PlayerSetting>( "PlayerSetting" );
	}
		
	void OnGUI()
	{
		//プレイヤーセッティング
		GUI.skin.label.fontSize = 24;
		GUILayout.Label("PlayerSetting");
		GUI.skin.label.fontSize = 0;
		productName = EditorGUILayout.TextField ("アプリ名", productName);
		companyName = EditorGUILayout.TextField ("チーム名", companyName);
		bundleVersion = EditorGUILayout.TextField ("バージョン", bundleVersion);
		bundleIdentifier = EditorGUILayout.TextField("BundleIdentifier",bundleIdentifier);
	}
}
```

#セーブとロードとレイアウト
このままではただ文字を入力するだけのウィンドウなので開いたときにPlayerSettingを読み取れるようにし、ボタンを押したら記入してある文字がPlayerSettingに書き出されるようにします。
そして、仕切りや、スペースなどを用いてある程度見やすくします。

```ruby:PlayerSetting.cs
using UnityEngine;
using UnityEditor;
using System.Collections;
using System.Collections.Generic;
using System.IO;

public class PlayerSetting : EditorWindow
{
	string productName;//商品名
	string companyName;//会社名
	string bundleVersion;//バージョン
	string bundleIdentifier;// パッケージ名

	bool one = true;

	[MenuItem("KitouSpecial/BuildSetting")]
	static void Open()
	{
		EditorWindow.GetWindow<PlayerSetting>( "PlayerSetting" );
	}
		
	void OnGUI()
	{
		//プレイヤーセッティング
		EditorGUILayout.BeginVertical( GUI.skin.box );
		GUI.skin.label.fontSize = 24;
		GUILayout.Label("PlayerSetting");
		GUI.skin.label.fontSize = 0;
		GUILayout.Space(15);
		productName = EditorGUILayout.TextField ("アプリ名", productName);
		GUILayout.Space(15);
		companyName = EditorGUILayout.TextField ("チーム名", companyName);
		GUILayout.Space(15);
		bundleVersion = EditorGUILayout.TextField ("バージョン", bundleVersion);
		GUILayout.Space(15);
		bundleIdentifier = EditorGUILayout.TextField("BundleIdentifier",bundleIdentifier);
		GUILayout.Space(15);
		if (GUILayout.Button ("Save")) {
			saveSetting ( );
		}
		EditorGUILayout.EndVertical();
		GUILayout.Space(30);

		if (one) {
			LoadSetting ();
			one = false;
		}
	}

	void LoadSetting( ) {
		productName = PlayerSettings.productName;
		companyName = PlayerSettings.companyName;
		bundleVersion = PlayerSettings.bundleVersion;
		bundleIdentifier = PlayerSettings.bundleIdentifier;
	}

	void saveSetting ( ) {
		PlayerSettings.productName = productName;
		PlayerSettings.companyName = companyName;
		PlayerSettings.bundleVersion = bundleVersion;
		PlayerSettings.bundleIdentifier = bundleIdentifier;
	}
}
```

セーブとロードの仕方は上記の通りです。GUILayout.Space(int)を使うことで好きなだけ空白を作ることができます。

<img width="503" alt="スクリーンショット 2016-10-22 14.52.56.png" src="https://qiita-image-store.s3.amazonaws.com/0/143839/18273ec4-7e42-c537-963b-342ab047721d.png">


次はEditorWindowを使ってビルドのあれこれをやってみたいと思います。