UnityEditor使用笔记 -- 自定义Hierarchy面板的右键菜单栏

   基本上每个项目都会有自己的一套基础UI,比如button , panel , render , 或者是做图集优化的Textrue 和 image 采用不用的封装图片组件来分开处理。

这些基础的东西在多人开发的过程中,使用的非常频繁,为了提高开发效率,几乎每个项目都会把这些基础组件做成一个类似Unity自带一样的效果,右键菜单栏一键创建XXX组件

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
public class Test2
{
     //注册到Assets目录下
	[MenuItem("Assets/项目封装的UI/创建一个Cube",false,8)]
	public static  void MyTest2()
	{
		// GameObject.Instantiate()

		//实际的项目中 资源可能放在别的路径,根据项目自行选择加载方式和路径
		GameObject obj = Resources.Load<GameObject>("cube");
		//选中了几个就在这几个物体的子目录下创建相应的东西
		for (int i = 0; i < Selection.transforms.Length; i++)
		{
			GameObject newObj =  GameObject.Instantiate(obj);
			newObj.transform.SetParent(Selection.transforms[i]);
			newObj.name = obj.name+i;
		}
	}


    [InitializeOnLoadMethod]
	 static void StartInitializeOnLoadMethod()
	 {
	     EditorApplication.hierarchyWindowItemOnGUI += OnHierarchyGUI;//hierarchy面板绘制GUI的委托,可以自己添加gui委托
	 }
 
	 static void OnHierarchyGUI(int instanceID, Rect selectionRect)//Unity hierarchy绘制的时候传递的2个参数
	 {
	     if (Event.current != null && Event.current.button == 1 && Event.current.type <= EventType.MouseUp) //右键,点击向上
	     {
		Vector2 mousePosition = Event.current.mousePosition;
		EditorUtility.DisplayPopupMenu(new Rect(mousePosition.x, mousePosition.y, 0, 0), "Assets/",null);//在鼠标的位置弹出菜单,菜单的路径
			
	     }
	 }
}

UnityEditor使用笔记 -- 自定义Hierarchy面板的右键菜单栏

  

上一篇:unity 不销毁物体,全局唯一性


下一篇:如何从另一个GameObject实例化一个:monobehaviour脚本