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));
}