様々なEditorWindow④ - PreferenceWindow
様々なEditorWindow① - EditorWindow
様々なEditorWindow② - SearchableWIndow
様々なEditorWindow③ - ScriptableWizard
の続きです。
PreferenceWindow
UnityEditorの環境設定を行うWindowです。
UnityEditorの見た目や動作に関する設定を行うWindowであるため、独自のアセットの設定Windowとして使用することはあまりオススメ出来ません。
Menuが増えるとスライダーが表示されます。 ( 見た目よろしくない... )
サンプル
using UnityEngine; using UnityEditor; public class Hoge { private const string HOGE_KEY = "HOGE_KEY"; private static string hogeValue = string.Empty; private static bool isLoaded = false; [PreferenceItem("CustomMenu")] static void Menu () { if (isLoaded == false) { hogeValue = EditorPrefs.GetString (HOGE_KEY, ""); isLoaded = true; Debug.Log ("Loaded"); } EditorGUI.BeginChangeCheck (); hogeValue = EditorGUILayout.TextField ("HogeKey", hogeValue); if (EditorGUI.EndChangeCheck ()) { EditorPrefs.SetString (HOGE_KEY, hogeValue); Debug.Log ("Saved"); } } }
PreferenceWindowっぽいWindowを作っちゃおう
アセットの設定Windowとかに利用しちゃいましょう。
using UnityEngine; using UnityEditor; using System; public class OriginalPreferenceWindow : EditorWindow { private GUIStyle preferencesSectionStyle = new GUIStyle ("PreferencesSection"); private CustomSections section = CustomSections.Hoge; [MenuItem("Window/OriginalPreferenceWindow")] static void Open () { OriginalPreferenceWindow window = GetWindow<OriginalPreferenceWindow> (true, "OriginalPreferenceWindow"); SetWindowSize (window); } //======================== //このソースコードそのまま使うならここをいじる //sections enum CustomSections { Hoge=0, Fuga, Foo } //選択したsectionに対するGUIの部分 void DrawSections () { switch (section) { case CustomSections.Hoge: GUILayout.Label ("Hoge!!"); break; case CustomSections.Foo: GUILayout.Label ("Foo!!"); break; case CustomSections.Fuga: GUILayout.Label ("Fuga!!"); break; } } //======================== //以下はレイアウトの設定なので基本触らない void OnGUI () { GUILayout.BeginHorizontal (); { DrawSectionBox (); GUILayout.BeginVertical (); { DrawSections (); } GUILayout.EndVertical (); } GUILayout.EndHorizontal (); } void DrawSectionBox () { GUILayout.BeginVertical (GUILayout.Width (120)); { ///=============== /// SelectionBox ///=============== GUILayout.Space (30); EditorGUIUtility.LookLikeControls (180f); GUI.DrawTexture (new Rect (0, 0, Screen.width * 0.24f, Screen.height), backgroundTexture); GUI.Label (new Rect (0, 0, Screen.width * 0.24f, Screen.height), "", "PreferencesSectionBox"); preferencesSectionStyle.normal.textColor = EditorGUIUtility.isProSkin ? new Color (0.7f, 0.7f, 0.7f, 1) : Color.black; { section = (CustomSections)GUILayout.SelectionGrid ( (int) section, Enum.GetNames (typeof(CustomSections)), 1, preferencesSectionStyle); } preferencesSectionStyle.onNormal.background = onNomalTexture; } GUILayout.EndVertical (); } //======================== //以下はスタイルの設定なので基本触らない private static void SetWindowSize (EditorWindow window) { int left = EditorPrefs.GetInt ("UnityEditor.PreferencesWindowx", 96); int top = EditorPrefs.GetInt ("UnityEditor.PreferencesWindowy", 271); int width = EditorPrefs.GetInt ("UnityEditor.PreferencesWindoww", 500); int height = EditorPrefs.GetInt ("UnityEditor.PreferencesWindowh", 400); window.position = new Rect (left, top, width, height); window.minSize = new Vector2 (width, height); window.maxSize = window.minSize; } private static Texture2D _onNomalTexture; public static Texture2D onNomalTexture { get { _onNomalTexture = new Texture2D (1, 1); _onNomalTexture.SetPixel (0, 0, EditorGUIUtility.isProSkin ? new Color32 (66, 96, 147, 255) : new Color32 (72, 129, 227, 255)); _onNomalTexture.Apply (); return _onNomalTexture; } } private static Texture2D _backgroundTexture; public static Texture2D backgroundTexture { get { if (_backgroundTexture == null) { _backgroundTexture = new Texture2D (1, 1); _backgroundTexture.SetPixel (0, 0, new Color32 (222, 222, 222, 255)); } return _backgroundTexture; } } }