Unity EditorWindow知識記錄


1.創建EditorWindow

using UnityEditor;
using UnityEngine;

public class ZZEditorWindow : EditorWindow
{
    [MenuItem("ZZTest/CreateWindows")]
    static void ZZTestCreateWindow()
    {
        ZZEditorWindow zzWindow = EditorWindow.GetWindow(typeof(ZZEditorWindow), false, "ZZTestWindow", false) as ZZEditorWindow;
        zzWindow.Show();
    }

    void OnEnable()
    {
        Debug.Log("ZZEditorWindow->OnEnable");
    }
}
public static EditorWindow GetWindow(System.Type t, [DefaultValue("false")] bool utility, [DefaultValue("null")] string title, [DefaultValue("true")] bool focus)
{
return EditorWindow.GetWindowPrivate(t, utility, title, focus);
}

第一個參數是窗口類型,注意是一定要繼承自EditorWindow。

第二個參數是窗口是否浮動,如果是就不能內嵌到unity其他窗口中去,如果不是就能嵌入其他窗口。默認是內嵌

第三個參數是窗口的標題,如果為空的話就采用類的名稱來當標題。默認是空

第四個參數是窗口是否是焦點  默認是焦點

2.靜態屬性

focusedWindow 目前有鍵盤焦點的EditorWindow。(只讀)

mouseOverWindow EditorWindow目前在鼠標光標下。(只讀)

3.屬性

autoRepaintOnSceneChange    每當場景改變時,窗口是否自動重繪?
maximized              這個窗口最大化了嗎?
maxSize               這個窗口的最大尺寸。
minSize              這個窗口的最小尺寸。
position                窗口在屏幕空間中的所需位置。
titleContent            用於繪制EditorWindows標題的GUIContent。
wantsMouseEnterLeaveWindow    檢查在此編輯器窗口的GUI中是否接收到MouseEnterWindow和MouseLeaveWindow事件。
wantsMouseMove         檢查在此編輯器窗口的GUI中是否收到MouseMove事件。

4.公共方法

BeginWindows      標記所有彈出窗口的開始區域。
Close           關閉編輯器窗口。
EndWindows         關閉一個以EditorWindow.BeginWindows開始的窗口組。
Focus           將鍵盤焦點移到另一個EditorWindow。
RemoveNotification    停止顯示通知消息。
Repaint         使窗口重繪。
SendEvent         發送一個事件到一個窗口。
Show            顯示EditorWindow。
ShowAsDropDown      顯示具有下拉行為和樣式的窗口。
ShowAuxWindow      在輔助窗口中顯示編輯器窗口。
ShowNotification      顯示通知消息。
ShowPopup           使用彈出式框架顯示編輯器窗口。
ShowUtility        將EditorWindow顯示為浮動實用程序窗口。

5.靜態方法

FocusWindowIfItsOpen   如果它是打開的,重點指定類型的第一個找到的EditorWindow。
GetWindow       返回當前在屏幕上的類型t的第一個EditorWindow。
GetWindowWithRect      返回當前在屏幕上的類型t的第一個EditorWindow。

6.消息

Awake             在新窗口打開時調用。
OnDestroy       調用OnDestroy關閉EditorWindow窗口。
OnFocus                  當窗口獲得鍵盤焦點時調用。
OnGUI                      在這里實現你自己的編輯器GUI。
OnHierarchyChange   當層次結構中的一個對象或一組對象發生變化時發送的消息的處理程序。
OnInspectorUpdate   OnInspectorUpdate以每秒10幀的速度調用,以便檢查員有機會進行更新。
OnLostFocus            當窗口失去鍵盤焦點時調用。
OnProjectChange         每當項目狀態發生變化時發送消息的處理程序。
OnSelectionChange    每當選擇發生變化時調用。
Update         在所有可見的窗口上每秒調用多次。

 

7.繼承的成員

7.1 屬性

hideFlags  該物體應該隱藏,保存在場景中還是用戶可以修改?
name      對象的名稱

7.2 公共方法

GetInstanceID   返回對象的實例ID。
ToString     返回游戲對象的名稱。

7.3 靜態方法

Destroy              刪除一個游戲對象,組件或資產。
DestroyImmediate        立即銷毀obj對象。強烈建議您改用Destroy。
DontDestroyOnLoad     加載新場景時,使對象目標不會自動銷毀。
FindObjectOfType        返回Type類型的第一個活動加載的對象。
FindObjectsOfType      返回Type類型的所有活動加載對象的列表。
Instantiate        克隆原始對象並返回克隆。
CreateInstance      創建可腳本化對象的實例。

 

7.4 操作符

bool       對象是否存在?
operator!=      比較兩個對象是否引用不同的對象。
operator==         比較兩個對象引用,看它們是否引用同一個對象。

7.5 消息

Awake     這個函數在ScriptableObject腳本啟動時被調用。
OnDisable    這個函數在腳本對象超出范圍時被調用。
OnEnable     這個函數在對象加載時被調用。

 

 

實用的方法:

  private List<string> logsList = new List<string>();
    private string logText = "這是一條測試的Log,id=";
    private int logIdx = 0;
    private Vector2 scrollPos;
    private bool isFoldoutLogs = true;
    private bool isFoldoutItem = true;
    private string configName = "111111";

    private void OnGUI()
    {
        isFoldoutLogs = EditorGUILayout.Foldout(isFoldoutLogs, "提示信息:");
        if (isFoldoutLogs)
        {
            scrollView();
        }

        isFoldoutItem = EditorGUILayout.Foldout(isFoldoutItem, "可以選擇的Item:");
        if (isFoldoutItem)
        {
            scrollViewItem();
        }

        button();

        configName = EditorGUILayout.TextField("配置名", configName);
    }

    private void scrollView()
    {
        EditorGUI.indentLevel = 1;
        scrollPos = EditorGUILayout.BeginScrollView(scrollPos, GUILayout.ExpandHeight(false));
        for (int i = 0; i < logsList.Count; i++)
        {
            EditorGUILayout.LabelField(logsList[i]);
        }

        GUILayout.EndScrollView();
    }

    private void scrollViewItem()
    {
        EditorGUI.indentLevel = 1;
        scrollPos = EditorGUILayout.BeginScrollView(scrollPos, GUILayout.ExpandHeight(false));
        for (int i = 0; i < logsList.Count; i++)
        {
            EditorGUI.indentLevel = 2;
            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.LabelField(logsList[i]);
            if (GUILayout.Button("刪除"))
            {
                logsList.RemoveAt(i);
                continue;
            }

            EditorGUILayout.EndHorizontal();
        }

        GUILayout.EndScrollView();
    }

    private void button()
    {
        EditorGUILayout.BeginHorizontal();
        if (GUILayout.Button("增加Log"))
        {
            logsList.Add(logText + logIdx);
            logIdx++;
        }

        if (GUILayout.Button("刪除Log"))
        {
            logsList.RemoveAt(logsList.Count - 1);
            logIdx--;
        }
    }

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM