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