拓展菜单
using UnityEditor;
using UnityEngine;
public class HierarchyCreateMyTools
{
[MenuItem("GameObject/拓展Hierarchy视图/创建Cube", false, 1)]
static void CreateCube()
{
GameObject.CreatePrimitive(PrimitiveType.Cube);
}
}
//----------------------------------------------------------
拓展布局
using UnityEditor;
using UnityEngine;
public class HierarchyLayoutMyTools
{
[InitializeOnLoadMethod]
static void EditorApplication_hierarchyWindowItemOnGUI()
{
EditorApplication.hierarchyWindowItemOnGUI = delegate (int instanceID, Rect selectionRect)
{
//--在hierarchy视图中选择一个资源
if (Selection.activeObject && instanceID == Selection.activeObject.GetInstanceID())
{
//--设置拓展按钮区域
float width = 50.0f;
float height = 20.0f;
selectionRect.x += (selectionRect.width - width);
selectionRect.width = width;
selectionRect.height = height;
//--点击事件
if (GUI.Button(selectionRect, "拓展按钮"))
{
Debug.Log("click : " + Selection.activeObject.name);
}
}
};
}
}
//----------------------------------------------------------------
重写菜单
using UnityEditor;
using UnityEngine;
public class HierarchyOverrideMenuMyTools
{
[MenuItem("Window/Test/重", false, 1)]
static void Test0()
{
}
[MenuItem("Window/Test/写", false, 1)]
static void Test1()
{
}
[MenuItem("Window/Test/菜", false, 1)]
static void Test2()
{
}
[MenuItem("Window/Test/单", false, 1)]
static void Test3()
{
}
[MenuItem("Window/Test/我的/001", false, 2)]
static void Test5()
{
}
[MenuItem("Window/Test/我的/002", false, 3)]
static void Test6()
{
}
[InitializeOnLoadMethod]
static void EditorApplication_hierarchyWindowItemOnGUI()
{
EditorApplication.hierarchyWindowItemOnGUI += OnHierachyGUI;
}
static void OnHierachyGUI(int instanceID, Rect selectionRect)
{
if (Event.current != null
&& selectionRect.Contains(Event.current.mousePosition)
&& Event.current.button == 2
&& Event.current.type <= EventType.MouseUp)
{
GameObject selectedGameObject = EditorUtility.InstanceIDToObject(instanceID) as GameObject;
if (selectedGameObject)
{
Vector2 mousePosition = Event.current.mousePosition;
EditorUtility.DisplayPopupMenu(new Rect(mousePosition.x, mousePosition.y, 0, 0), "Window/Test", null);
Event.current.Use();
}
}
}
}
监听鼠标某个键(此处是中键)的点击事件,打开一个新的菜单窗口。
Event.current 来获取当前的事件。
//--------------------------------------------------------------
重写 创建 UI/Image
using UnityEditor;
using UnityEngine;
using UnityEngine.UI;
public class HierarchyOverrideCreateUIImageMyTools
{
//--重写创建 UI/Image
[MenuItem("GameObject/UI/Image")]
static void CreateUIImage()
{
//--选中一个节点
if (Selection.activeTransform)
{
//--该节点或其父节点含有Canvas画布组件
if (Selection.activeTransform.GetComponentInParent<Canvas>())
{
Image image = new GameObject("Image").AddComponent<Image>();
image.raycastTarget = false;//--自定义实现--raycastTarget默认不勾选
image.transform.SetParent(Selection.activeTransform, false);
//--设置选中状态
Selection.activeTransform = image.transform;
}
}
}
}