概要
プロジェクト単位でエディタ情報を保存するためにEditorUserSettings
を利用します。
またデフォルトでUnityの.gitignore
に含まれているので、各個人のエディタの設定を保存するといった使い方が適しているでしょう。
使い方
基本使うのは以下の二つのメソッドのみです。
// セーブ public static void SetConfigValue(string name, string value) // ロード public static string GetConfigValue(string name)
これらのデータはUserSettings/EditorUserSettings.asset
に格納されます。(以前はLibrary/EditorUserSettings.asset
に格納されていましたが、2020.1
時点ではUserSettings
に変更されているようです)
public class EditorUserSettingsSample : MonoBehaviour { [ContextMenu("Save")] public void Save() { EditorUserSettings.SetConfigValue("Key", "value"); Debug.Log("Save"); } [ContextMenu("Load")] public void Load() { var data = EditorUserSettings.GetConfigValue("Key"); if(data == null) Debug.Log("Keyで保存されたデータはありません"); else Debug.Log($"Load : {data}"); } }
応用例
エディタ拡張での設定を保存しておくのに利用することができます。
public class SampleWindow : EditorWindow { private const string Key = "Season"; private enum Season { Spring, Summer, Autumn, Winter } private Season _season; [MenuItem("Tools/SampleWindow")] private static void OpenWindow() { var window = GetWindow<SampleWindow>("SampleWindow"); // ウィンドウ起動時、前回の設定を引き継ぐ var season = EditorUserSettings.GetConfigValue(Key); if(!string.IsNullOrEmpty(season)) window._season = (Season)Enum.Parse(typeof(Season), season, true); } private void OnGUI() { var season = (Season)EditorGUILayout.EnumPopup("Season: ", _season); if (season != _season) { _season = season; // 値が変更されたら、設定を保存しておく EditorUserSettings.SetConfigValue(Key, _season.ToString()); } } }
もしEditorUserSettings
を使わなかった場合、ウィンドウを新しく作成する度に_season
はデフォルト値になってしまいます。
しかしランタイム(ゲーム内)でデータを利用したいといった場合には、ScriptableObject
を利用する方が良いでしょう。