using System; using System.Collections.Generic; using System.IO; using System.Reflection; using UnityEngine; using UnityEditor; namespace Pack { public class PackGUI { public const float kSingleLineHeight = 24f; public const float kIndentPerLevel = 15; public static string kIntFieldFormatString = "#######0"; public static float indent => EditorGUI.indentLevel * kIndentPerLevel; public static readonly int s_MutliSelectField = "MutliSelectField".GetHashCode(); public static readonly int s_DelayedTextFieldHash = "DelayedEditorTextField".GetHashCode(); public static readonly int s_ButtonGridHash = "ButtonGrid".GetHashCode(); public static readonly int s_SliderHash = "EditorSlider".GetHashCode(); private static Stack s_ChangeGUIBgColorStack = new Stack(); public static void BeginChangeGUIBgColor(Color color) { s_ChangeGUIBgColorStack.Push(GUI.backgroundColor); GUI.backgroundColor = color; } public static void EndChangeGUIBgColor() { if (s_ChangeGUIBgColorStack.Count > 0) GUI.backgroundColor = s_ChangeGUIBgColorStack.Pop(); } public static void EndAllChangeGUIBgColor() { while (s_ChangeGUIBgColorStack.Count > 0) { GUI.backgroundColor = s_ChangeGUIBgColorStack.Pop(); } } public static void BeginDiffValue() { PackGUI.BeginChangeGUIBgColor(Color.red); } public static void EndDiffValue() { PackGUI.EndChangeGUIBgColor(); } private static Stack s_ChangeGUIColorStack = new Stack(); public static void BeginChangeGUIColor(Color color) { s_ChangeGUIColorStack.Push(GUI.color); GUI.color = color; } public static void EndChangeGUIColor() { if (s_ChangeGUIColorStack.Count > 0) GUI.color = s_ChangeGUIColorStack.Pop(); } public static void EndAllChangeGUIColor() { while (s_ChangeGUIColorStack.Count > 0) { GUI.color = s_ChangeGUIColorStack.Pop(); } } private static Stack s_ChangeEnabledStack = new Stack(); public static void BeginChangeEnabled(bool enabled) { s_ChangeEnabledStack.Push(GUI.enabled); GUI.enabled = enabled; } public static void EndChangeEnabled() { if (s_ChangeEnabledStack.Count > 0) GUI.enabled = s_ChangeEnabledStack.Pop(); } public static void EndAllChangeEnabled() { while (s_ChangeEnabledStack.Count > 0) { GUI.enabled = s_ChangeEnabledStack.Pop(); } } private static Stack s_ChangeLabelWidthStack = new Stack(); public static void BeginChangeLabelWidth(float labelWidth) { s_ChangeLabelWidthStack.Push(EditorGUIUtility.labelWidth); EditorGUIUtility.labelWidth = labelWidth; } public static void EndChangeLabelWidth() { if (s_ChangeLabelWidthStack.Count > 0) EditorGUIUtility.labelWidth = s_ChangeLabelWidthStack.Pop(); } public static void EndAllChangeLabelWidth() { while (s_ChangeLabelWidthStack.Count > 0) { EditorGUIUtility.labelWidth = s_ChangeLabelWidthStack.Pop(); } } public static void DrawLabelField(string label, string content) { Rect totalPosition = EditorGUILayout.GetControlRect(true, PackGUI.kSingleLineHeight, PackGUI.styles.label); int id = GUIUtility.GetControlID(PackGUI.s_DelayedTextFieldHash, FocusType.Keyboard, totalPosition); Rect labelPosition = new Rect(totalPosition.x + PackGUI.indent, totalPosition.y, EditorGUIUtility.labelWidth - PackGUI.indent, PackGUI.kSingleLineHeight); Rect fieldPosition = new Rect(totalPosition.x + EditorGUIUtility.labelWidth, totalPosition.y, totalPosition.width - EditorGUIUtility.labelWidth, totalPosition.height); EditorGUI.HandlePrefixLabel(totalPosition, labelPosition, EditorGUIUtility.TrTempContent(label), id, PackGUI.styles.label); EditorGUI.HandlePrefixLabel(totalPosition, fieldPosition, EditorGUIUtility.TrTempContent(content), id, PackGUI.styles.label); } public static void DrawDelayedIntField(string label, string tooltip, string srcVal, ref string val, bool abs = false) { Rect totalPosition = EditorGUILayout.GetControlRect(true, PackGUI.kSingleLineHeight, PackGUI.styles.textField); int id = GUIUtility.GetControlID(PackGUI.s_DelayedTextFieldHash, FocusType.Keyboard, totalPosition); Rect labelPosition = new Rect(totalPosition.x + PackGUI.indent, totalPosition.y, EditorGUIUtility.labelWidth - PackGUI.indent, PackGUI.kSingleLineHeight); Rect fieldPosition = new Rect(totalPosition.x + EditorGUIUtility.labelWidth, totalPosition.y, totalPosition.width - EditorGUIUtility.labelWidth - 100, totalPosition.height); Rect resetPosition = new Rect(totalPosition.x + totalPosition.width - 90, totalPosition.y, 80, totalPosition.height); EditorGUI.HandlePrefixLabel(totalPosition, labelPosition, EditorGUIUtility.TrTextContent(label, tooltip), id, PackGUI.styles.label); bool changed = (srcVal != val); if (changed) BeginDiffValue(); string temp = EditorGUI.DelayedTextField(fieldPosition, GUIContent.none, id, val, PackGUI.styles.textField); if (changed) EndDiffValue(); int newVal; if (ExpressionEvaluator.Evaluate(temp, out newVal)) { if (abs && newVal < 0) newVal = 0; val = newVal.ToString(); } if (changed) { if (GUI.Button(resetPosition, EditorGUIUtility.TrTextContent("重置默认", srcVal), PackGUI.styles.miniButton)) { val = srcVal; } } } public static void DrawDelayedIntField(string label, string tooltip, uint srcVal, ref uint val, bool abs = false) { Rect totalPosition = EditorGUILayout.GetControlRect(true, PackGUI.kSingleLineHeight, PackGUI.styles.textField); int id = GUIUtility.GetControlID(PackGUI.s_DelayedTextFieldHash, FocusType.Keyboard, totalPosition); Rect labelPosition = new Rect(totalPosition.x + PackGUI.indent, totalPosition.y, EditorGUIUtility.labelWidth - PackGUI.indent, PackGUI.kSingleLineHeight); Rect fieldPosition = new Rect(totalPosition.x + EditorGUIUtility.labelWidth, totalPosition.y, totalPosition.width - EditorGUIUtility.labelWidth - 100, totalPosition.height); Rect resetPosition = new Rect(totalPosition.x + totalPosition.width - 90, totalPosition.y, 80, totalPosition.height); EditorGUI.HandlePrefixLabel(totalPosition, labelPosition, EditorGUIUtility.TrTextContent(label, tooltip), id, PackGUI.styles.label); bool changed = (srcVal != val); if (changed) BeginDiffValue(); string temp = EditorGUI.DelayedTextField(fieldPosition, GUIContent.none, id, val.ToString(), PackGUI.styles.textField); if (changed) EndDiffValue(); int newVal; if (ExpressionEvaluator.Evaluate(temp, out newVal)) { if (abs && newVal < 0) newVal = 0; val = (uint)newVal; } if (changed) { if (GUI.Button(resetPosition, EditorGUIUtility.TrTextContent("重置默认", srcVal.ToString()), PackGUI.styles.miniButton)) { val = srcVal; } } } public static void DrawDelayedTextField(string label, string srcContent, ref string content, bool notNull = false) { DrawDelayedTextField(label, null, srcContent, ref content, notNull); } public static void DrawDelayedTextField(string label, string tooltip, string srcContent, ref string content, bool notNull = false) { Rect totalPosition = EditorGUILayout.GetControlRect(true, PackGUI.kSingleLineHeight, PackGUI.styles.textField); int id = GUIUtility.GetControlID(PackGUI.s_DelayedTextFieldHash, FocusType.Keyboard, totalPosition); Rect labelPosition = new Rect(totalPosition.x + PackGUI.indent, totalPosition.y, EditorGUIUtility.labelWidth - PackGUI.indent, PackGUI.kSingleLineHeight); Rect fieldPosition = new Rect(totalPosition.x + EditorGUIUtility.labelWidth, totalPosition.y, totalPosition.width - EditorGUIUtility.labelWidth - 100, totalPosition.height); Rect resetPosition = new Rect(totalPosition.x + totalPosition.width - 90, totalPosition.y, 80, totalPosition.height); EditorGUI.HandlePrefixLabel(totalPosition, labelPosition, EditorGUIUtility.TrTextContent(label, tooltip), id, PackGUI.styles.label); bool changed = (srcContent != content); if (changed) BeginDiffValue(); string temp = EditorGUI.DelayedTextField(fieldPosition, GUIContent.none, id, content, PackGUI.styles.textField); if (changed) EndDiffValue(); if (notNull) { if (!string.IsNullOrEmpty(temp)) { content = temp; } } else { content = temp; } if (changed) { if (GUI.Button(resetPosition, EditorGUIUtility.TrTextContent("重置默认", srcContent), PackGUI.styles.miniButton)) { content = srcContent; } } } public static void DrawIntSlider(string label, uint leftValue, uint rightValue, uint srcContent, ref uint content) { DrawIntSlider(label, null, leftValue, rightValue, srcContent, ref content); } public static void DrawIntSlider(string label, string tooltip, uint leftValue, uint rightValue, uint srcContent, ref uint content) { int contentTemp = (int)content; DrawIntSlider(label, tooltip, (int)leftValue, (int)rightValue, (int)srcContent, ref contentTemp); content = (uint)contentTemp; } public static void DrawIntSlider(string label, int leftValue, int rightValue, int srcContent, ref int content) { DrawIntSlider(label, null, leftValue, rightValue, srcContent, ref content); } public static void DrawIntSlider(string label, string tooltip, int leftValue, int rightValue, int srcContent, ref int content) { Rect totalPosition = EditorGUILayout.GetControlRect(true, PackGUI.kSingleLineHeight, PackGUI.styles.textField); int id = GUIUtility.GetControlID(PackGUI.s_SliderHash, FocusType.Keyboard, totalPosition); Rect labelPosition = new Rect(totalPosition.x + PackGUI.indent, totalPosition.y, EditorGUIUtility.labelWidth - PackGUI.indent, PackGUI.kSingleLineHeight); Rect fieldPosition = new Rect(totalPosition.x + EditorGUIUtility.labelWidth + PackGUI.indent, totalPosition.y, totalPosition.width - EditorGUIUtility.labelWidth - 100 - PackGUI.indent, totalPosition.height); Rect resetPosition = new Rect(totalPosition.x + totalPosition.width - 90, totalPosition.y, 80, totalPosition.height); EditorGUI.HandlePrefixLabel(totalPosition, labelPosition, EditorGUIUtility.TrTextContent(label, tooltip), id, PackGUI.styles.label); bool changed = (srcContent != content); if (changed) BeginDiffValue(); Rect dragZoneRect = new Rect(fieldPosition.x, fieldPosition.y, fieldPosition.width - 100, fieldPosition.height); content = Mathf.RoundToInt((float)doSliderMethodInfo.Invoke(null, new object[] { fieldPosition, dragZoneRect, id, content, leftValue, rightValue, kIntFieldFormatString, leftValue, rightValue, 1f, PackGUI.styles.horizontalSlider, PackGUI.styles.horizontalSliderThumb, null })); if (changed) EndDiffValue(); if (changed) { if (GUI.Button(resetPosition, EditorGUIUtility.TrTextContent("重置默认", srcContent.ToString()), PackGUI.styles.miniButton)) { content = srcContent; } } } private static MethodInfo s_DoSliderMethodInfo = null; private static MethodInfo doSliderMethodInfo { get { if (s_DoSliderMethodInfo == null) { BindingFlags bindingFlags = (BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance); s_DoSliderMethodInfo = typeof(EditorGUI).GetMethod("DoSlider", bindingFlags, null, new Type[] { typeof(Rect), typeof(Rect), typeof(int), typeof(float), typeof(float), typeof(float), typeof(string), typeof(float), typeof(float), typeof(float), typeof(GUIStyle), typeof(GUIStyle), typeof(Texture2D) }, null); } return s_DoSliderMethodInfo; } } public static void DrawMutliSelectField(string label, T[] canSelectItems, T[] srcSelectedItems, ref T[] selectedItems, T[] noEnableValues, int maxSelectNum = -1, bool isSort = true) { DrawMutliSelectField(label, null, canSelectItems, srcSelectedItems, ref selectedItems, noEnableValues, maxSelectNum, isSort); } public static void DrawMutliSelectField(string label, string tooltip, T[] canSelectItems, T[] srcSelectedItems, ref T[] selectedItems, T[] noEnableValues, int maxSelectNum = -1, bool isSort = true) { Rect totalPosition = EditorGUILayout.GetControlRect(false, PackGUI.kSingleLineHeight, PackGUI.styles.popup); var id = GUIUtility.GetControlID(PackGUI.s_MutliSelectField, FocusType.Keyboard, totalPosition); Rect labelPosition = new Rect(totalPosition.x + PackGUI.indent, totalPosition.y, EditorGUIUtility.labelWidth - PackGUI.indent, PackGUI.kSingleLineHeight); Rect fieldPosition = new Rect(totalPosition.x + PackGUI.indent + EditorGUIUtility.labelWidth, totalPosition.y, totalPosition.width - EditorGUIUtility.labelWidth - 100 - PackGUI.indent, totalPosition.height); Rect resetPosition = new Rect(totalPosition.x + totalPosition.width - 90, totalPosition.y, 80, totalPosition.height); EditorGUI.HandlePrefixLabel(totalPosition, labelPosition, EditorGUIUtility.TrTextContent(label, tooltip), id, PackGUI.styles.label); bool changed = !ArrayUtility.ArrayEquals(srcSelectedItems, selectedItems); if (changed) BeginDiffValue(); selectedItems = MutliSelectFieldGUI.DoMutliSelectFieldShowValue(fieldPosition, id, canSelectItems, selectedItems, noEnableValues, maxSelectNum, isSort, PackGUI.styles.popup); if (changed) EndDiffValue(); if (changed) { if (GUI.Button(resetPosition, EditorGUIUtility.TrTextContent("重置默认", string.Join(";", srcSelectedItems)), PackGUI.styles.miniButton)) { ArrayUtility.Clear(ref selectedItems); ArrayUtility.AddRange(ref selectedItems, srcSelectedItems); } } } public static void DrawVersionCodeField(string label, bool shortFormat, VersionCode srcVersionCode, ref VersionCode versionCode) { Rect totalPosition = EditorGUILayout.GetControlRect(false, PackGUI.kSingleLineHeight, PackGUI.styles.popup); totalPosition.height = PackGUI.kSingleLineHeight; Rect labelPosition = new Rect(totalPosition.x + PackGUI.indent, totalPosition.y, EditorGUIUtility.labelWidth - PackGUI.indent, PackGUI.kSingleLineHeight); EditorGUI.HandlePrefixLabel(totalPosition, labelPosition, EditorGUIUtility.TrTempContent(label + "(" + versionCode.ToString() + ")"), 0, PackGUI.styles.label); Rect fieldPosition = new Rect(totalPosition.x + PackGUI.indent + EditorGUIUtility.labelWidth, totalPosition.y, totalPosition.width - EditorGUIUtility.labelWidth - 100 - PackGUI.indent, totalPosition.height); Rect offsetPosition = fieldPosition; offsetPosition.width = (fieldPosition.width - 30) * 0.25f; DrawUintField(offsetPosition, 0, "major", srcVersionCode.major, ref versionCode.major); DrawUintField(offsetPosition, 1, "minor", srcVersionCode.minor, ref versionCode.minor); DrawUintField(offsetPosition, 2, "release", srcVersionCode.release, ref versionCode.release); if (!shortFormat) DrawUintField(offsetPosition, 3, "patch", srcVersionCode.patch, ref versionCode.patch); Rect resetPosition = new Rect(totalPosition.x + totalPosition.width - 90, totalPosition.y, 80, totalPosition.height); if (srcVersionCode != versionCode) { if (GUI.Button(resetPosition, EditorGUIUtility.TrTextContent("重置默认", srcVersionCode.ToString(shortFormat)), PackGUI.styles.miniButton)) { versionCode = srcVersionCode; } } } public static void DrawUintField(Rect position, int offsetLine, string label, uint srcValue, ref uint value) { position.x = position.x + (position.width + 10) * offsetLine; Vector2 size = PackGUI.styles.label.CalcSize(EditorGUIUtility.TrTempContent(label)); float labelWidth = size.x; Rect labelPosition = new Rect(position.x, position.y, labelWidth, PackGUI.kSingleLineHeight); Rect fieldPosition = new Rect(position.x + labelWidth, position.y, position.width - labelWidth, position.height); var id = GUIUtility.GetControlID(PackGUI.s_MutliSelectField, FocusType.Keyboard, position); EditorGUI.HandlePrefixLabel(position, labelPosition, EditorGUIUtility.TrTempContent(label), id, PackGUI.styles.label); bool changed = srcValue != value; if (changed) PackGUI.BeginDiffValue(); int intVal = EditorGUI.IntField(fieldPosition, (int)value, PackGUI.styles.numberField); if (intVal < 0) intVal = 0; value = (uint)intVal; if (changed) PackGUI.EndDiffValue(); } public static void DrawSelectFolderField(string label, string rootPath, string srcPath, ref string curPath) { Rect totalPosition = EditorGUILayout.GetControlRect(true, PackGUI.kSingleLineHeight, PackGUI.styles.textField); int id = GUIUtility.GetControlID(PackGUI.s_DelayedTextFieldHash, FocusType.Keyboard, totalPosition); Rect labelPosition = new Rect(totalPosition.x + PackGUI.indent, totalPosition.y, EditorGUIUtility.labelWidth - PackGUI.indent, PackGUI.kSingleLineHeight); Rect fieldPosition = new Rect(totalPosition.x + PackGUI.indent + EditorGUIUtility.labelWidth, totalPosition.y, totalPosition.width - EditorGUIUtility.labelWidth - 220 - PackGUI.indent, totalPosition.height); Rect openPosition = new Rect(totalPosition.x + totalPosition.width - 210, totalPosition.y, 110, totalPosition.height); Rect resetPosition = new Rect(totalPosition.x + totalPosition.width - 90, totalPosition.y, 80, totalPosition.height); EditorGUI.HandlePrefixLabel(totalPosition, labelPosition, EditorGUIUtility.TrTempContent(label), id, PackGUI.styles.label); bool changed = srcPath != curPath; if (changed) BeginDiffValue(); if (GUI.Button(fieldPosition, curPath, PackGUI.styles.miniButton)) { rootPath = Path.GetFullPath(rootPath); rootPath = rootPath.Replace('\\', '/'); if (!Directory.Exists(rootPath)) { Directory.CreateDirectory(rootPath); } string curAbsPath = Path.Combine(rootPath, curPath); curAbsPath = Path.GetFullPath(rootPath); curAbsPath = curAbsPath.Replace('\\', '/'); if (!Directory.Exists(curAbsPath)) { Directory.CreateDirectory(curAbsPath); } string tempPath = EditorUtility.OpenFolderPanel("选择一个文件夹", rootPath, curPath); if (!string.IsNullOrEmpty(tempPath)) { if (tempPath.StartsWith(rootPath)) { curPath = tempPath.Substring(rootPath.Length, tempPath.Length - rootPath.Length); } } } if (changed) EndDiffValue(); PackGUI.BeginChangeEnabled(true); if (GUI.Button(openPosition, EditorGUIUtility.TrTextContent("打开文件夹"), PackGUI.styles.miniButton)) { string curAbsPath = Path.Combine(rootPath, curPath); EditorUtility.OpenWithDefaultApp(curAbsPath); } PackGUI.EndChangeEnabled(); if (changed) { if (GUI.Button(resetPosition, EditorGUIUtility.TrTextContent("重置默认", srcPath), PackGUI.styles.miniButton)) { curPath = srcPath; } } } public static void DrawSelectFileFieldWithFilters(string label, string directory, string[] filters, string srcFileName, ref string curFileName) { Rect totalPosition = EditorGUILayout.GetControlRect(true, PackGUI.kSingleLineHeight, PackGUI.styles.textField); int id = GUIUtility.GetControlID(PackGUI.s_DelayedTextFieldHash, FocusType.Keyboard, totalPosition); Rect labelPosition = new Rect(totalPosition.x + PackGUI.indent, totalPosition.y, EditorGUIUtility.labelWidth - PackGUI.indent, PackGUI.kSingleLineHeight); Rect fieldPosition = new Rect(totalPosition.x + PackGUI.indent + EditorGUIUtility.labelWidth, totalPosition.y, totalPosition.width - EditorGUIUtility.labelWidth - 220 - PackGUI.indent, totalPosition.height); Rect openPosition = new Rect(totalPosition.x + totalPosition.width - 210, totalPosition.y, 110, totalPosition.height); Rect resetPosition = new Rect(totalPosition.x + totalPosition.width - 90, totalPosition.y, 80, totalPosition.height); EditorGUI.HandlePrefixLabel(totalPosition, labelPosition, EditorGUIUtility.TrTempContent(label), id, PackGUI.styles.label); bool changed = srcFileName != curFileName; if (changed) PackGUI.BeginDiffValue(); if (GUI.Button(fieldPosition, curFileName, PackGUI.styles.miniButton)) { directory = Path.GetFullPath(directory); directory = directory.Replace('\\', '/'); if (!Directory.Exists(directory)) { Directory.CreateDirectory(directory); } string tempPath = EditorUtility.OpenFilePanelWithFilters("选择一个文件", directory, filters); if (!string.IsNullOrEmpty(tempPath)) { if (tempPath.StartsWith(directory)) { curFileName = tempPath.Substring(directory.Length, tempPath.Length - directory.Length); } } } if (changed) PackGUI.EndDiffValue(); PackGUI.BeginChangeEnabled(true); if (GUI.Button(openPosition, EditorGUIUtility.TrTextContent("打开文件"), PackGUI.styles.miniButton)) { string curAbsPath = Path.Combine(directory, curFileName); EditorUtility.OpenWithDefaultApp(curAbsPath); } PackGUI.EndChangeEnabled(); if (changed) { if (GUI.Button(resetPosition, EditorGUIUtility.TrTextContent("重置默认", srcFileName), PackGUI.styles.miniButton)) { curFileName = srcFileName; } } } public static void DrawToggleField(string label, bool srcContent, ref bool content) { DrawToggleField(label, null, srcContent, ref content); } public static void DrawToggleField(string label, string tooltip, bool srcContent, ref bool content) { Rect totalPosition = EditorGUILayout.GetControlRect(true, PackGUI.kSingleLineHeight, PackGUI.styles.textField); int id = GUIUtility.GetControlID(PackGUI.s_DelayedTextFieldHash, FocusType.Keyboard, totalPosition); Rect labelPosition = new Rect(totalPosition.x + PackGUI.indent, totalPosition.y, EditorGUIUtility.labelWidth - PackGUI.indent, PackGUI.kSingleLineHeight); Rect fieldPosition = new Rect(totalPosition.x + EditorGUIUtility.labelWidth, totalPosition.y, totalPosition.width - EditorGUIUtility.labelWidth - 100, totalPosition.height); Rect resetPosition = new Rect(totalPosition.x + totalPosition.width - 90, totalPosition.y, 80, totalPosition.height); EditorGUI.HandlePrefixLabel(totalPosition, labelPosition, EditorGUIUtility.TrTextContent(label, tooltip), id, PackGUI.styles.label); bool changed = (srcContent != content); if (changed) BeginDiffValue(); content = EditorGUI.Toggle(fieldPosition, content, PackGUI.styles.toggle); if (changed) EndDiffValue(); if (changed) { if (GUI.Button(resetPosition, EditorGUIUtility.TrTextContent("重置默认", srcContent.ToString()), PackGUI.styles.miniButton)) { content = srcContent; } } } private static Styles s_Styles; public static Styles styles { get { if (s_Styles == null) { s_Styles = new Styles(); } return s_Styles; } } public class Styles { public GUIStyle label; public GUIStyle miniLabel; public GUIStyle largeLabel; public GUIStyle boldLabel; public GUIStyle miniBoldLabel; public GUIStyle textField; public GUIStyle miniButton; public GUIStyle popup; public GUIStyle toolbar; public GUIStyle toolbarButton; public GUIStyle miniButtonLeft; public GUIStyle miniButtonMid; public GUIStyle miniButtonRight; public GUIStyle helpBox; public GUIStyle numberField; public GUIStyle box; public GUIStyle toggle; public GUIStyle horizontalSlider; public GUIStyle horizontalSliderThumb; public GUIStyle reorderableListHeadBg; public Styles() { Font font = Font.CreateDynamicFontFromOSFont(new string[] { "Fira Code Retina", "华文楷体", }, 16); label = UnifyGUIStyle(EditorStyles.label, font); miniLabel = UnifyGUIStyle(EditorStyles.miniLabel, font); largeLabel = UnifyGUIStyle(EditorStyles.largeLabel, font); boldLabel = UnifyGUIStyle(EditorStyles.boldLabel, font); boldLabel.fontStyle = FontStyle.Bold; miniBoldLabel = UnifyGUIStyle(EditorStyles.miniBoldLabel, font); miniBoldLabel.fontStyle = FontStyle.Bold; textField = UnifyGUIStyle(EditorStyles.textField, font); miniButton = UnifyGUIStyle(EditorStyles.miniButton, font); popup = UnifyGUIStyle(EditorStyles.popup, font); toolbar = UnifyGUIStyle(EditorStyles.toolbar, font); toolbarButton = UnifyGUIStyle(EditorStyles.toolbarButton, font); miniButtonLeft = UnifyGUIStyle(EditorStyles.miniButtonLeft, font); miniButtonMid = UnifyGUIStyle(EditorStyles.miniButtonMid, font); miniButtonRight = UnifyGUIStyle(EditorStyles.miniButtonRight, font); helpBox = UnifyGUIStyle(EditorStyles.helpBox, font); helpBox.fixedHeight = 42; numberField = UnifyGUIStyle(EditorStyles.numberField, font); box = new GUIStyle(GUI.skin.box); toggle = new GUIStyle(EditorStyles.toggle); horizontalSlider = new GUIStyle(GUI.skin.horizontalSlider); // horizontalSlider.fixedHeight = 14; horizontalSliderThumb = new GUIStyle(GUI.skin.horizontalSliderThumb); // horizontalSliderThumb.fixedWidth = 14; // horizontalSliderThumb.fixedHeight = 14; reorderableListHeadBg = new GUIStyle("RL Header"); reorderableListHeadBg.fixedHeight = 28; reorderableListHeadBg.fontSize = 16; if (font) reorderableListHeadBg.font = font; } private GUIStyle UnifyGUIStyle(GUIStyle srcGUIStyle, Font font) { GUIStyle gUIStyle = new GUIStyle(srcGUIStyle); gUIStyle.fixedHeight = 22; gUIStyle.fontSize = 16; if (font) gUIStyle.font = font; return gUIStyle; } } } }