From 6750e0f7b154b70e160d1fe15b7cfe9577754424 Mon Sep 17 00:00:00 2001 From: Mark Joshwel Date: Fri, 31 Jan 2025 20:12:25 +0800 Subject: [PATCH] game(scripts): help box help er --- Game/Assets/Scripts/HelpBox.cs | 47 +++++++++++++++++++++++++++++ Game/Assets/Scripts/HelpBox.cs.meta | 11 +++++++ 2 files changed, 58 insertions(+) create mode 100644 Game/Assets/Scripts/HelpBox.cs create mode 100644 Game/Assets/Scripts/HelpBox.cs.meta diff --git a/Game/Assets/Scripts/HelpBox.cs b/Game/Assets/Scripts/HelpBox.cs new file mode 100644 index 0000000..2eb1efe --- /dev/null +++ b/Game/Assets/Scripts/HelpBox.cs @@ -0,0 +1,47 @@ +// https://discussions.unity.com/t/helpattribute-allows-you-to-use-helpbox-in-the-unity-inspector-window/659414/22 +using UnityEngine; +using UnityEditor; + +public enum HelpBoxMessageType { None, Info, Warning, Error } + +public class HelpBoxAttribute : PropertyAttribute { + + public string Text; + public HelpBoxMessageType MessageType; + + public HelpBoxAttribute(string text, HelpBoxMessageType messageType = HelpBoxMessageType.None) { + this.Text = text; + this.MessageType = messageType; + } +} + +[CustomPropertyDrawer(typeof(HelpBoxAttribute))] +public class HelpBoxAttributeDrawer : DecoratorDrawer { + + public override float GetHeight() { + try { + var helpBoxAttribute = attribute as HelpBoxAttribute; + if (helpBoxAttribute == null) return base.GetHeight(); + var helpBoxStyle = (GUI.skin != null) ? GUI.skin.GetStyle("helpbox") : null; + return helpBoxStyle == null ? base.GetHeight() : Mathf.Max(40f, helpBoxStyle.CalcHeight(new GUIContent(helpBoxAttribute.Text), EditorGUIUtility.currentViewWidth) + 4); + } + catch (System.ArgumentException) { + return 3 * EditorGUIUtility.singleLineHeight; // Handle Unity 2022.2 bug by returning default value. + } + } + + public override void OnGUI(Rect position) { + if (attribute is not HelpBoxAttribute helpBoxAttribute) return; + EditorGUI.HelpBox(position, helpBoxAttribute.Text, GetMessageType(helpBoxAttribute.MessageType)); + } + + private static MessageType GetMessageType(HelpBoxMessageType helpBoxMessageType) { + switch (helpBoxMessageType) { + default: + case HelpBoxMessageType.None: return MessageType.None; + case HelpBoxMessageType.Info: return MessageType.Info; + case HelpBoxMessageType.Warning: return MessageType.Warning; + case HelpBoxMessageType.Error: return MessageType.Error; + } + } +} diff --git a/Game/Assets/Scripts/HelpBox.cs.meta b/Game/Assets/Scripts/HelpBox.cs.meta new file mode 100644 index 0000000..6509e67 --- /dev/null +++ b/Game/Assets/Scripts/HelpBox.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 08e77f16aecb3cf41b13291313e08860 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: