/*
* 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