
昨日参加した「第4回 渋谷Unity技術勉強会xコロプラUnity事例発表」でPreference(Unityの設定画面)を拡張することが出来る PreferenceItem というものを知りました。まだ使った事が無いので早速、使ってみました。
Unity Script Reference – PreferenceItem
http://unity3d.com/support/documentation/ScriptReference/PreferenceItem.html
調べてみると PreferenceItem はバージョン3.5から追加されたみたいです。
Improved preferences window that users can extend by using the PreferenceItem attribute.
UNITY: What's New in Unity 3.5
http://unity3d.com/unity/whats-new/unity-3.5
サンプルとしてToDoをテキストで保存するものを作ってみました。
C#とJavaScript、両方のサンプルを作りましたのでお好みの方をお使い下さい。
他のエディタ拡張と同様に Editor フォルダを作成し、その中にファイルを保存すると適用されます。
※現在のバージョンでは Editor フォルダに入れてなくても動作するみたいです(Windows版のUnityで確認。バグかな?)。

【C#での実装(Todo.cs)】
using UnityEngine;
using System.Collections;
using UnityEditor;
public class Todo {
private static bool prefsLoaded = false;
private static string text;
private const string TEXT_KEY = "TODO";
[PreferenceItem ("ToDo")]
public static void PreferencesGUI () {
if (!prefsLoaded) {
text = EditorPrefs.GetString (TEXT_KEY, "");
prefsLoaded = true;
}
text = EditorGUILayout.TextArea (text, GUILayout.Height(100));
if (GUI.changed)
EditorPrefs.SetString (TEXT_KEY, text);
}
}【JavaScriptでの実装(Todo.js)】
#pragma strict
public class Todo {
static var prefsLoaded : boolean = false;
static var text : String;
static var TEXT_KEY : String = "TODO";
@PreferenceItem ("ToDo")
static function PreferencesGUI () {
if (!prefsLoaded) {
text = EditorPrefs.GetString (TEXT_KEY, "");
prefsLoaded = true;
}
text = EditorGUILayout.TextArea (text, GUILayout.Height(100));
if (GUI.changed)
EditorPrefs.SetString (TEXT_KEY, text);
}
}