拓展编辑器(七)_拓展布局
拓展布局
Hierarchy视图中,同样可以对布局进行拓展。
using UnityEngine; using UnityEditor; public class 拓展布局1 { [InitializeOnLoadMethod] static void InitializeOnLoadMethod() { EditorApplication.hierarchyWindowItemOnGUI = delegate (int instanceID, Rect selectionRect) { //在Herarchy视图中选择一个资源 if (Selection.activeObject && instanceID == Selection.activeObject.GetInstanceID()) { float width = 50f; float height = 20f; selectionRect.x += (selectionRect.width - width); selectionRect.width = width; selectionRect.height = height; //点击事件 if (GUI.Button(selectionRect, AssetDatabase.LoadAssetAtPath<Texture>("Assets/Image.png"))) { Debug.LogFormat("click:{0}", Selection.activeObject.name); } } }; } }
在代码中实现EditorApplication.hierarchyWindowItemOnGUI委托,就可以重写Hierarchy视图了。这里使用了GUI。Button来绘制自定义按钮,点击可以监听事件。(GHI的种类比较丰富,此外,我们还可以拓展其它显示元素),同时还用了之前介绍的AssetDatabase AP从Assets文件夹中加载了一张图片。
Selection.activeObject.GetInstanceID()方法可以获得物体的InstanceID,一个预制体与它实例化出的物体之间,InstanceID都是不一样的,都是唯一的。
效果如图所示:
点击图标后,在Console窗口中输出这个游戏对象。它的工作原理就是监听EditorAppliaction.hierarchyWindowItemOnGUI渲染回调。