untiy Hierarchy面板的Node结点标识方便开发
发布日期:2022-03-03 10:43:59 浏览次数:9 分类:技术文章

本文共 1763 字,大约阅读时间需要 5 分钟。

/*

 * http://www.manew.com/thread-102160-1-1.html 游戏蛮牛
 */
 #if UNITY_EDITOR
using UnityEngine;
using UnityEditor;
using System;

[InitializeOnLoad] //Unity启动的时候执行编辑器的脚本 需要静态的构造函数

static class DrawIcon

{
    static Texture2D icon;
    //静态的构造函数
    static DrawIcon()
    {
        callback();
    }

    private static void callback()

    {
        icon =  AssetDatabase.LoadAssetAtPath<Texture2D>(@"Assets/AssetFolder/GUIAsset/Textures/ChatFace/015.png");

        EditorApplication.hierarchyWindowItemOnGUI = (EditorApplication.HierarchyWindowItemCallback)Delegate.Combine(EditorApplication.hierarchyWindowItemOnGUI, 
            new EditorApplication.HierarchyWindowItemCallback(HierarchyWindowItemOnGUI));
        /*EditorApplication.hierarchyWindowItemOnGUI这对象用的是
        * EditorApplication.HierarchyWindowItemCallback委托的结构
        */
        //添加委托
        EditorApplication.hierarchyWindowItemOnGUI += HierarchyIcon;
    }
    private static void HierarchyIcon(int instanceID, Rect selectionRect)
    {
        Rect r = new Rect(selectionRect);
      
        r.x = 5.0f;
       
        //调整大小的
        r.width = 20;
        //EditorUtility.InstanceIDToObject是通过一个id来变换成一个GameObj
        GameObject go = EditorUtility.InstanceIDToObject(instanceID) as GameObject;
        //  && 后面就是选择那一个物体前面有图标的   我的是挂了IconMark脚本的都会绘制上图标
        if (go != null && go.GetComponent<IConMark>() != null)
        {
            GUI.Label(r, icon);
        }
        else if(go != null && go.GetComponent<UIWindowBehaviour>() != null)
        {
            GUI.Label(r, "wnd");
        }
       
    }
    private static void HierarchyWindowItemOnGUI(int instanceID, Rect selectionRect)
    {
        GameObject gameObject = EditorUtility.InstanceIDToObject(instanceID) as GameObject;
        if (gameObject != null)
        {
            var trans = gameObject.GetComponentsInChildren<Transform>(true);

            Rect position = new Rect(selectionRect);

            position.x = position.width + (selectionRect.x - 40);
            position.width = 40;
            position.height = 16f;
            GUI.Label(position, trans.Length.ToString());
        }
    }
}
#endif

转载地址:https://blog.csdn.net/yangjie6898862/article/details/115113893 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:unity粒子系统设置粒子的长度,旋转等
下一篇:对unity结点进行显示处理打标记,显示孩子结点数量

发表评论

最新留言

感谢大佬
[***.8.128.20]2024年04月23日 04时34分00秒