強火で進め

このブログではプログラム関連の記事を中心に書いてます。

Preferences(Unityの設定画面)の機能拡張「PreferenceItem」を使ってみた


昨日参加した「第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);
    }
}