Files
trail-into-darkness/Packages/com.jovian.inspector/Editor/Attributes/LinkAttribute.cs
2026-03-29 19:16:39 +02:00

47 lines
1.8 KiB
C#

using UnityEditor;
using UnityEngine;
namespace Jovian.InspectorTools {
public class LinkAttribute : PropertyAttribute {
public readonly string message;
public readonly string url;
public LinkAttribute(string message, string url) {
this.message = message;
this.url = url;
}
}
}
#if UNITY_EDITOR
namespace Jovian.InspectorTools.Internal {
[CustomPropertyDrawer(typeof(LinkAttribute))]
public class LinkAttributeDrawer : PropertyDrawer {
public override float GetPropertyHeight(SerializedProperty property, GUIContent label) {
return base.GetPropertyHeight(property, label) + EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing;
}
public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) {
//If you don't capture these and recreate below, GUIContent label becomes replaces with LinkButtons GUIContent
string labelText = label.text;
string labelTooltip = label.tooltip;
string message = ((LinkAttribute)attribute).message;
string url = ((LinkAttribute)attribute).url;
var linkPosition = new Rect(position.x, position.y, position.width, EditorGUIUtility.singleLineHeight);
if(EditorGUI.LinkButton(linkPosition, message)) {
Application.OpenURL(url);
}
var fieldPosition = new Rect(position.x, position.y + EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing, position.width, EditorGUIUtility.singleLineHeight);
EditorGUI.PropertyField(fieldPosition, property, new GUIContent(labelText,labelTooltip));
}
}
}
#endif