Unity编辑器拓展之三十六:LinkFileLabelField和LinkUrlLabelField

个人博客

文章目录

本文介绍LinkFileLabelField和LinkUrlLabelField

前言

本文目的在于封装一个能够Link到项目下的asset,和一个打开浏览器URL的EditorField。

源码

public static class EditorGUILayoutExtension
{
    private static GUIStyle _linkStyle = null;

    private static GUIStyle LinkStyle
    {
        get
        {
            if (_linkStyle == null)
            {
                _linkStyle = new GUIStyle(EditorStyles.label);
                _linkStyle.wordWrap = false;
                _linkStyle.fontSize = 11;
                _linkStyle.normal.textColor = new Color(0x00 / 255f, 0x78 / 255f, 0xDA / 255f, 1f);
                _linkStyle.stretchWidth = false;
            }

            return _linkStyle;
        }
    }

    public static void LinkFileLabelField(string label, string assetPath, params GUILayoutOption[] options)
    {
        LinkFileLabelField_internal(new GUIContent(label), AssetDatabase.LoadAssetAtPath<Object>(assetPath), options);
    }

    public static void LinkFileLabelField(string label, Object linkObject, params GUILayoutOption[] options)
    {
        LinkFileLabelField_internal(new GUIContent(label), linkObject, options);
    }

    public static void LinkFileLabelField(GUIContent label, string assetPath, params GUILayoutOption[] options)
    {
        LinkFileLabelField_internal(label, AssetDatabase.LoadAssetAtPath<Object>(assetPath), options);
    }

    public static void LinkFileLabelField(GUIContent label, Object linkObject, params GUILayoutOption[] options)
    {
        LinkFileLabelField_internal(label, linkObject, options);
    }

    private static void LinkFileLabelField_internal(GUIContent label, Object linkObject, params GUILayoutOption[] options)
    {
        var position = LinkLabelField_internal(label, options);
        if (GUI.Button(position, label, LinkStyle))
        {
            Selection.activeObject = linkObject;
            EditorGUIUtility.PingObject(linkObject);
        }
    }

    public static void LinkUrlLabelField(string label, string url, params GUILayoutOption[] options)
    {
        LinkUrlLabelField_internal(new GUIContent(label), url, options);
    }

    public static void LinkUrlLabelField(GUIContent label, string url, params GUILayoutOption[] options)
    {
        LinkUrlLabelField_internal(label, url, options);
    }

    private static void LinkUrlLabelField_internal(GUIContent label, string url, params GUILayoutOption[] options)
    {
        var position = LinkLabelField_internal(label, options);
        if (GUI.Button(position, label, LinkStyle))
        {
            Application.OpenURL(url);
        }
    }

    private static Rect LinkLabelField_internal(GUIContent label, params GUILayoutOption[] options)
    {
        var position = GUILayoutUtility.GetRect(label, LinkStyle, options);
        Handles.BeginGUI();
        Handles.color = LinkStyle.normal.textColor;
        Handles.DrawLine(new Vector3(position.xMin, position.yMax), new Vector3(position.xMax, position.yMax));
        Handles.color = Color.white;
        Handles.EndGUI();
        EditorGUIUtility.AddCursorRect(position, MouseCursor.Link);
        return position;
    }
}

使用

EditorGUILayoutExtension.LinkFileLabelField("TestPrefab", "Assets/TestPrefab.prefab");
EditorGUILayoutExtension.LinkUrlLabelField("www.baidu.com","https://www.baidu.com");

在写插件的时候,文档里面可以使用LinkUrlLabelField链接到你的插件主页去,还是比较方便得啦。

本篇文章,如果有不懂,欢迎留言~

以上知识分享,如有错误,欢迎指出,共同学习,共同进步。如果有不懂,欢迎留言评论!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值