はじめに
ゲーム開発していると、Unityエディタがこうだったら良いのにな、と思うことはないですか?

作業が多くて面倒! もっと効率よくゲーム制作できないかな?
Unityが提供しているウィンドウには、Hierarchy、Inspector、Consoleなど様々ありますが、自分専用にウィンドウを作ることができます。
これによって、今まで時間がかかっていた色んな作業を効率よく進められるようになり、実装時間の短縮につながります。
ウィンドウの作り方
Assets内のどこかに、Editorという名前でフォルダを作り、その中にスクリプトを作成します。


必ずEditorという名前のフォルダーの中にスクリプトを追加しよう!
ウィンドウを表示させるスクリプト
MenuItemによって、Window > My Windowから作成したウィンドウを開けるようになります。
using UnityEngine;
using UnityEditor;
using System.Collections;
class MyWindow : EditorWindow {
[MenuItem ("Window/My Window")]
public static void ShowWindow () {
EditorWindow.GetWindow(typeof(MyWindow));
}
void OnGUI () {
// 実際のウィンドウのコードはここに書きます
}
}
Unityエディタに戻ると、Windowに作成したMy Windowが表示されています。

ウィンドウを開いても、まだ何もありませんが、コードを書いていくことで自由な処理をさせられます。

使用例
どういったことができるかの詳細はこちらのリファレンスをご覧ください。
EditorGUILayout - Unity スクリプトリファレンス
Auto laid out version of EditorGUI.
ここでは一例として、いくつか試してみます。

試した内容
- ラベル
- ボタンの配置
- スライダーで調整できるパラメーター
- ゲームオブジェクトタグの選択
スクリプト
using UnityEngine;
using UnityEditor;
using System.Collections;
class MyWindow : EditorWindow
{
static float value = 0.0f;
string selectedTag = "";
[MenuItem("Window/My Window")]
public static void ShowWindow()
{
EditorWindow.GetWindow(typeof(MyWindow));
}
void OnGUI()
{
// 実際のウィンドウのコードはここに書きます
// ラベルを太字で追加
GUILayout.Label("ラベルです", EditorStyles.boldLabel);
// ボタンを追加
if (GUILayout.Button("ボタンです"))
{
// ここにボタンを押した時の処理を書きます
}
// 0〜100までの値で変化するスライダー
value = EditorGUILayout.Slider("スライダーの名前",value, 0, 100);
// ゲームオブジェクトのタグを選択
selectedTag = EditorGUILayout.TagField(
"タグを選択してください",
selectedTag);
}
}
おわりに
できることが多くて何をしたら良いか迷ってしまいますが、夢が広がりますね。
大手の人気アプリでも、数多くの自作ツールを使って開発が行われているようです。