このようなEditor拡張でポップアップメニュー付きのFoldoutを作成する際のサンプルコードです。凹Tipさんのコードを元にコードをプラスしています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 |
using UnityEditor; using UnityEngine; public class FoldoutWindow : EditorWindow { private static FoldoutWindow window; private static bool isOpen = true; [MenuItem("Test/FoldoutWidnow", false)] private static void OpenWindow() { window = GetWindow<FoldoutWindow>(true, "Foldout"); window.position = new Rect( Screen.currentResolution.width / 2 - 150, Screen.currentResolution.height / 2 - 150, 300, 300 ); window.Show(); } void OnGUI() { EditorGUILayout.BeginHorizontal(); { isOpen = Foldout(isOpen, "Foldout"); } EditorGUILayout.EndHorizontal(); if (isOpen) { EditorGUILayout.BeginVertical(); { // gui GUILayout.Label("Label1"); GUILayout.Label("Label2"); GUILayout.Label("Label3"); } EditorGUILayout.EndVertical(); } } public static bool Foldout(bool isOpen, string title) { // style var style = new GUIStyle("ShurikenModuleTitle"); style.font = new GUIStyle(EditorStyles.label).font; style.border = new RectOffset(15, 7, 2, 2); style.fontStyle = FontStyle.Bold; style.fontSize = 12; style.fixedHeight = 26; style.fixedWidth = 300; style.contentOffset = new Vector2(20f, -2f); var rect = GUILayoutUtility.GetRect(16f, 26f, style); GUI.Box(rect, title, style); var e = Event.current; // ▼の位置 var toggleRect = new Rect(rect.x + 4f, rect.y + 3f, 16f, 16f); if (e.type == EventType.Repaint) { EditorStyles.foldout.Draw(toggleRect, false, false, isOpen, false); } // action if (e.type == EventType.MouseDown && rect.Contains(e.mousePosition)) { isOpen = !isOpen; e.Use(); } // menu GUILayout.FlexibleSpace(); if (GUILayout.Button(GetIconTextureGUIContent("Assets/Icon/menuIcon.png"), GUIStyle.none)) { // ここにメニューの内容を入れていく GenericMenu toolsMenu = new GenericMenu(); toolsMenu.AddItem(new GUIContent("Copy"), false, Copy); toolsMenu.AddItem(new GUIContent("Paste"), false, Paste); toolsMenu.DropDown(new Rect(window.position.width - 20, 0, 0, 0)); } GUILayout.Space(5); return isOpen; } // TextureをGUIContent形式に変換 public static GUIContent GetIconTextureGUIContent(string imagePath) { GUIContent contents = new GUIContent(); Texture iconTexture = (Texture)AssetDatabase.LoadAssetAtPath(imagePath, typeof(Texture2D)); contents.image = iconTexture; return contents; } // GenericMenuで[Copy]を選択したときに実行される関数 private static void Copy() { Debug.Log("Copy"); } // GenericMenuで[Paste]を選択したときに実行される関数 private static void Paste() { Debug.Log("Paste"); } } |
参考サイト: http://tips.hecomi.com/entry/2016/10/15/004144
0 Comments
2 Pingbacks