Unity Editor 基礎篇(十四):Scene面板菜單

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));
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章