我們在操作unity中會經常遇到這樣那樣的窗口。
Inspector窗口,Console窗口,Hierarchy窗口,等 這些都是unity內置的。
又或者說你看到人家插件的窗口,花花綠綠的,自己也想寫一個拿來學習(裝逼)
unity已經爲開發者做了很多支持。 還是去看api,全英文我怎麼看的懂,找翻譯,找度娘,不要找藉口
廢話不多說,上車了。
傳送門官方EditorWindow API https://docs.unity3d.com/ScriptReference/EditorWindow.html
具體參數我就暫時不介紹了。 太多 講不過來,自己慢慢試(狗頭保命.png)
BeginArea | 在固定的屏幕區域開始GUI控件的GUI佈局塊。 |
BeginHorizontal | 開始水平對照組。 |
BeginScrollView | 開始一個自動佈局的滾動視圖。 |
BeginVertical | 開始一個垂直控制組。 |
Box | 製作一個自動佈局框。 |
Button | 做一個單一的按鈕。 |
EndArea | 關閉一個以BeginArea開始的GUILayout塊。 |
EndHorizontal | 關閉一組開始與開始橫向。 |
EndScrollView | 以調用開始滾動視圖來結束滾動視圖。 |
EndVertical | 結束一組開始與開始垂直。 |
ExpandHeight | 傳遞給控件以允許或不允許垂直擴展的選項。 |
ExpandWidth | 傳遞給控件以允許或不允許水平擴展的選項。 |
FlexibleSpace | 插入一個靈活的空間元素。 |
Height | 傳遞給控件的選項,使其具有絕對高度。 |
HorizontalScrollbar | 製作一個水平滾動條。 |
HorizontalSlider | 一個水平滑塊,用戶可以拖動來改變最小值和最大值之間的值。 |
Label | 製作一個自動佈局標籤。 |
MaxHeight | 傳遞給控件以指定最大高度的選項。 |
MaxWidth | 傳遞給控件以指定最大寬度的選項。 |
MinHeight | 傳遞給控件以指定最小高度的選項。 |
MinWidth | 傳遞給控件以指定最小寬度的選項。 |
PasswordField | 創建一個用戶可以輸入密碼的文本字段。 |
RepeatButton | 做一個重複按鈕。只要用戶按住不放,按鈕就會返回true |
SelectionGrid | 製作一個選擇網格。 |
Space | 在當前佈局組中插入空格 |
TextArea | 創建一個多行文本字段,用戶可以在其中編輯字符串。 |
TextField | 創建一個單行文本字段,用戶可以在其中編輯字符串。 |
Toggle | 做一個開關按鈕。 |
Toolbar | 製作一個工具欄 |
VerticalScrollbar | 製作一個垂直滾動條 |
Width | 傳遞給控件的選項,使其具有絕對寬度。 |
Window |
創建文件夾Editor與腳本,位置無所謂,跟 Resources一樣。
然後自己去EditorWindow類中看下,F12,知其然知其所以然
上代碼,最簡單的窗口
public class EditorWindowTimor : EditorWindow
{
[MenuItem("Timor/TimorWindow -- 提莫隊長的窗口")] //添加菜單選項
public static void ShowWindow()
{
EditorWindow window = EditorWindow.GetWindow(typeof(EditorWindowTimor));
window.Show();
}
}
效果
繼續研究GetWindow參數
所以這幾中寫法都沒有問題,自己去改參數,挨個試試
EditorWindow window1 = EditorWindow.GetWindow(typeof(TimorWindow));
EditorWindow window2 = EditorWindow.GetWindow(typeof(TimorWindow), true, "提莫隊長的窗口", true);
EditorWindow window3 = EditorWindow.GetWindow<TimorWindow>();
EditorWindow window4 = EditorWindow.GetWindow<TimorWindow>(true);
EditorWindow window5 = EditorWindow.GetWindowWithRect(typeof(TimorWindow), new Rect(Screen.width / 3, Screen.height / 3, 500, 500), true, "提莫隊長的窗口");
我們去看官方API
參數
t : 窗口類型,記得繼承editorWindow
title :窗口的標題
focus : 是否獲得焦點,默認獲得焦點
utility:是窗口是否浮動,如果是就不能內嵌到unity其他窗口中去,如果不是就能嵌入其他窗口。(可以省略,默認爲內嵌入式)
rect :窗體的出現位置,及窗體大小
窗體事件
using UnityEngine;
using UnityEditor;
namespace Timor.Editor
{
public class TimorFirstWindow : EditorWindow
{
[MenuItem("Timor/我的第一個窗口")]
public static void ShowMyWindow()
{
TimorFirstWindow window = EditorWindow.GetWindow<TimorFirstWindow>("提莫的窗口");
window.Show();
window.minSize = new Vector2(200, 300);
}
#region 窗體事件調用
private void OnProjectChange()
{
Debug.Log("當場景改變時調用");
}
private void OnHierarchyChange()
{
Debug.Log("當選擇對象屬性改變時調用");
}
void OnGetFocus()
{
Debug.Log("當窗口得到焦點時調用");
}
private void OnLostFocus()
{
Debug.Log("當窗口失去焦點時調用");
}
private void OnSelectionChange()
{
Debug.Log("當改變選擇不同對象時調用");
}
private void OnInspectorUpdate()
{
Debug.Log("監視面板調用");
}
private void OnDestroy()
{
Debug.Log("當窗口關閉時調用");
}
private void OnFocus()
{
Debug.Log("當窗口獲取鍵盤焦點時調用");
}
#endregion
}
}
好了,這些都是空白的窗口,下幾篇講添加內容