private int DrawTextColorInfoGUI(TextColorInfo info) { var result = 0; using (new EditorGUILayout.HorizontalScope()) { EditorGUI.BeginChangeCheck(); var name = EditorGUILayout.TextField(info.name, GUILayout.MinWidth(100f)); GUILayout.Space(2f); var textColor = EditorGUILayout.ColorField(info.textColor, GUILayout.Width(65f)); var hasOutline = EditorGUILayout.Toggle(info.hasOutline, GUILayout.Width(14f)); var outlineColor = EditorGUILayout.ColorField(info.outlineColor, GUILayout.Width(65f)); var hasShadow = EditorGUILayout.Toggle(info.hasShadow, GUILayout.Width(14f)); var shadowColor = EditorGUILayout.ColorField(info.shadowColor, GUILayout.Width(65f)); if (EditorGUI.EndChangeCheck()) { info.name = name; info.textColor = textColor; info.hasShadow = hasShadow; info.shadowColor = shadowColor; info.hasOutline = hasOutline; info.outlineColor = outlineColor; result = 1; } if (GUILayout.Button("-", EditorStyles.miniButton, GUILayout.Width(25f))) { result = -1; } } return(result); }
//----- property ----- //----- method ----- public override void OnInspectorGUI() { var instance = target as TextColorSetting; var colorInfos = instance.ColorInfos; var headerItems = new List <EditorLayoutTools.ColumnHeaderContent>(); headerItems.Add(new EditorLayoutTools.ColumnHeaderContent("Name", GUILayout.MinWidth(100f))); headerItems.Add(new EditorLayoutTools.ColumnHeaderContent("Color", GUILayout.Width(65f))); headerItems.Add(new EditorLayoutTools.ColumnHeaderContent("Outline", GUILayout.Width(85f))); headerItems.Add(new EditorLayoutTools.ColumnHeaderContent("Shadow", GUILayout.Width(85f))); using (new EditorGUILayout.HorizontalScope()) { GUILayout.Space(5f); EditorLayoutTools.DrawColumnHeader(headerItems.ToArray()); GUILayout.Space(35f); if (28 <= colorInfos.Length) { GUILayout.Space(18f); } } var list = colorInfos.ToList(); var updated = false; var deleteIndexs = new List <int>(); using (new ContentsScope()) { using (var scrollViewScope = new EditorGUILayout.ScrollViewScope(scrollPosition, GUILayout.Height(500f))) { for (var i = 0; i < list.Count; i++) { var result = DrawTextColorInfoGUI(list[i]); if (result == 1) { updated = true; } if (result == -1) { deleteIndexs.Add(i); updated = true; } } foreach (var index in deleteIndexs) { list.RemoveAt(index); } scrollPosition = scrollViewScope.scrollPosition; } } using (new EditorGUILayout.HorizontalScope()) { GUILayout.FlexibleSpace(); if (GUILayout.Button("+", EditorStyles.miniButton, GUILayout.Width(60f))) { var info = new TextColorInfo(); while (true) { info.guid = Guid.NewGuid().ToString(); if (list.All(x => x.guid != info.guid)) { break; } } list.Add(info); updated = true; } } if (updated) { UnityEditorUtility.RegisterUndo("TextColorSettingInspector Undo", instance); Reflection.SetPrivateField(instance, "colorInfos", list.ToArray()); } }