1,使用MenuItem可以实现的功能:
1)在编辑器菜单栏中添加自己的菜单项
2)在Hierarchy的右键菜单中添加自己的菜单项
3)在游戏对象组件的右键菜单中添加自己的菜单项
2,简单代码实现
//在编辑器菜单栏中添加自己的功能,
//注意:
//1)MyTools脚本放到Editor文件夹下。
//2)using UnityEditor。
//3)MyFunction1函数必须是静态的
using UnityEngine;
using UnityEditor;
public class MyTools
{
[MenuItem("我的工具/方法1")]
static void MyFunction1()
{
Debug.Log("fun1");
}
}
//在Hierarchy的右键菜单中添加自己的功能,
//注意:
//1)菜单项必须放到“GameObject”选项下才能在右键菜单中显示。
//2)测试时(版本2019.3)发现菜单项经常刷新不出来(尤其是使用中文时),修改一下名字再刷新就能显示了,不知道怎么回事。
//3)priority值越小显示的越靠前
public class MyTools
{
[MenuItem("GameObject/我的工具/方法1",priority =0)]
static void MyFunction1()
{
Debug.Log("fun1");
}
}
//在游戏对象组件的右键菜单中添加自己的功能
//注意:1)必须使用“CONTEXT”开头
using UnityEngine;
using UnityEditor;
public class MyTools
{
[MenuItem("CONTEXT/Player/Init")]
static void MyFunction1()
{
Debug.Log("fun1");
}
}
3.扩展
在编辑器下使用右键创建预设体
方式1:
1)使用AssetDataBase加载资源(以Assets开头,必须要写全路径,包括后缀,如.prefab)
2)使用PrefabUtility.InstantiatePrefab创建预设体,这种方式创建的对象是正常的预设体,修改预设体后创建的对象会一起改变
using UnityEngine;
using UnityEditor;
public class MyTools
{
[MenuItem("GameObject/MyA/Cube",priority =0)]
static void CreateCube()
{
GameObject prefab = AssetDatabase.LoadAssetAtPath<GameObject>("Assets/Prefabs/Cube.prefab");
GameObject prefabObj = PrefabUtility.InstantiatePrefab(prefab) as GameObject;
if (Selection.activeGameObject != null)
{
prefabObj.transform.SetParent(Selection.activeTransform);
}
prefabObj.transform.localPosition = Vector3.zero;
Selection.activeGameObject = prefabObj;
}
}
方式2:
1)使用Resource.Load加载资源(资源要放到Resources文件夹下,不用写后缀)
2)使用Instantiate创建预设体(要继承MonoBehaviour,创建的对象与预设体不再关联)
using UnityEngine;
using UnityEditor;
public class MyTools:MonoBehaviour
{
[MenuItem("GameObject/MyA/Cube",priority =0)]
static void CreateCube()
{
GameObject prefab = Resources.Load<GameObject>("Prefabs/Cube");
GameObject prefabObj = Instantiate(prefab);
if (Selection.activeGameObject != null)
{
prefabObj.transform.SetParent(Selection.activeTransform);
}
prefabObj.transform.localPosition = Vector3.zero;
Selection.activeGameObject = prefabObj;
}
}
网友评论