Unity Editor 基础篇(十四):Scene面板菜单
效果:
代码:(脚本放在Editor目录)
public class SceneEditor {
[InitializeOnLoadMethod] //unity初始化时调用
static void Init()
{
SceneView.onSceneGUIDelegate += OnSceneGUI;
}
static void OnSceneGUI(SceneView sceneView)
{
//...
}
}
这样Scene面板刷新时候会执行这里的OnSceneGUI方法。
例如 我们想点击Scene面板时候打开一个菜单,这在OnSceneGUI函数里写:
ddCommonItems();
Show();
调用这两个函数;
定义在下面:
static public void AddCommonItems()
{
AddItem("新建", false, UIEditorHelper.CreatNewLayoutForMenu); //第三个参数是点击按钮要调用的函数
AddItem("打开界面", false, UIEditorHelper.LoadLayout);
AddItem("打开文件夹", false, UIEditorHelper.LoadLayoutWithFolder);
}
static public void Show()
{
if (mMenu != null)
{
mMenu.ShowAsContext();
mMenu = null;
mEntries.Clear();
}
}
AddItem调用的是下面的函数:
static List<string> mEntries = new List<string>();
static GenericMenu mMenu;
static public void AddItem(string item, bool isChecked, GenericMenu.MenuFunction callback)
{
if (callback != null)
{
if (mMenu == null) mMenu = new GenericMenu();
int count = 0;
for (int i = 0; i < mEntries.Count; ++i)
{
string str = mEntries[i];
if (str == item) ++count;
}
mEntries.Add(item);
if (count > 0) item += " [" + count + "]";
mMenu.AddItem(new GUIContent(item), isChecked, callback);
}
else AddDisabledItem(item);
}
static public void AddDisabledItem(string item)
{
if (mMenu == null) mMenu = new GenericMenu();
mMenu.AddDisabledItem(new GUIContent(item));
}