手機(jī)客戶端網(wǎng)站怎么做網(wǎng)絡(luò)營(yíng)銷一般月薪多少
文章目錄
- 1 GUILayout
- 2 EditorGUI 介紹
- 3 文本、層級(jí)、標(biāo)簽、顏色拾取
- 3.1 LabelField
- 3.2 LayerField
- 3.3 TagField
- 3.4 ColorField
- 3.5 代碼示例
- 4 枚舉選擇、整數(shù)選擇、按下按鈕
- 4.1 EnumPopup / EnumFlagsField
- 4.2 IntPopup
- 4.3 DropdownButton
- 4.4 代碼示例
- 5 對(duì)象關(guān)聯(lián)、各類型輸入
- 5.1 ObjectField
- 5.2 各類型輸入
- 5.3 代碼示例
- 6 折疊、折疊組
- 6.1 Foldout
- 6.2 BeginFoldoutHeaderGroup / EndFoldoutHeaderGroup
- 6.3 代碼示例
- 7 開關(guān)、開關(guān)組
- 7.1 Toggle / ToggleLeft
- 7.2 BeginToggleGroup / EndToggleGroup
- 7.3 代碼示例
- 8 滑動(dòng)條、雙滑塊滑動(dòng)條
- 8.1 Slider / IntSlider
- 8.2 MinMaxSlider
- 8.3 代碼示例
- 9 幫助框、間隔
- 9.1 HelpBox
- 9.2 Space
- 9.3 代碼示例
- 10 動(dòng)畫曲線、布局
- 10.1 CurveField
- 10.2 布局相關(guān) API
- 10.3 代碼示例
1 GUILayout
? GUILayout 是 GUI 自動(dòng)布局的公共類,其中的方法和 GUI 基本類似,均用來繪制、響應(yīng)各種 UI 控件,不同之處在于 GUILayout 在 GUI 的基礎(chǔ)上加入了自動(dòng)布局功能,無需過多關(guān)心 UI 控件的位置和大小。
GUILayoutOption 布局選項(xiàng)
- 控件的固定寬高
GUILayout.Width(300);
GUILayout.Height(200);
- 允許控件的最小寬高
GUILayout.MinWidth(50);
GUILayout.MinHeight(50);
- 允許控件的最大寬高
GUILayout.MaxWidth(100);
GUILayout.MaxHeight(100);
- 允許或禁止水平拓展
GUILayout.ExpandWidth(true); //允許
GUILayout.ExpandHeight(false); //禁止
GUILayout.ExpandHeight(true); //允許
GUILayout.ExpandHeight(false); //禁止
2 EditorGUI 介紹
? EditorGUI 類似 GUI,是用于繪制編輯器拓展 UI 的工具類,提供 GUI 中沒有的 API(主要是編輯器功能中會(huì)用到的一些特殊控件)。
? EditorGUILayout 類似于 GUILayout,是帶有自動(dòng)布局功能的 EditorGUI 繪制工具類。通常,會(huì)將 EditorGUI 和 GUI 混合使用來制作編輯器拓展功能。但由于用到自動(dòng)布局功能,因此接下來著重介紹 EditorGUILayout 中的功能。EditorGUI 和它的區(qū)別僅僅是需要自己設(shè)置位置而已。
? 詳細(xì)內(nèi)容:https://docs.unity.cn/cn/2022.3/ScriptReference/EditorGUILayout.html。
3 文本、層級(jí)、標(biāo)簽、顏色拾取
3.1 LabelField
EditorGUILayout.LabelField("文本標(biāo)題", "文本內(nèi)容");
3.2 LayerField
int變量 = EditorGUILayout.LayerField("層級(jí)選擇", int變量);
3.3 TagField
string變量 = EditorGUILayout.TagField("標(biāo)簽選擇", string變量);
3.4 ColorField
color變量 = EditorGUILayout.ColorField(new GUIContent("標(biāo)題"), color變量, 是否顯示拾色器, 是否顯示透明度通道, 是否支持HDR);
3.5 代碼示例
public class Lesson3 : EditorWindow
{[MenuItem("Unity編輯器拓展/Lesson3/EditorGUI知識(shí)講解窗口")]private static void OpenLesson3() {Lesson3 win = EditorWindow.GetWindow<Lesson3>("EditorGUI知識(shí)講解窗口");win.Show();}int layer;string tag;Color color;private void OnGUI() {// 窗口中的控件相關(guān)繪制 邏輯處理相關(guān)的內(nèi)容// EditorGUI相關(guān)的控件 同樣還是需要在OnGUI當(dāng)中進(jìn)行實(shí)現(xiàn) 才能被顯示出來// 文本EditorGUILayout.LabelField("文本標(biāo)題", "測(cè)試內(nèi)容");EditorGUILayout.LabelField("文本內(nèi)容");// 層級(jí)layer = EditorGUILayout.LayerField("層級(jí)選擇", layer);// 標(biāo)簽tag = EditorGUILayout.TagField("標(biāo)簽選擇", tag);// 顏色獲取color = EditorGUILayout.ColorField(new GUIContent("自定義顏色獲取"), color, true, false, false);}
}

4 枚舉選擇、整數(shù)選擇、按下按鈕
4.1 EnumPopup / EnumFlagsField
-
枚舉選擇
枚舉變量 = (枚舉類型)EditorGUILayout.EnumPopup("枚舉選擇", 枚舉變量);
-
多選枚舉
注意:多選枚舉進(jìn)行的是或運(yùn)算,聲明枚舉時(shí)一定注意其中的賦值,并且一定要有多種情況的搭配值。
枚舉變量 = (枚舉類型)EditorGUILayout.EnumFlagsField("枚舉多選", 枚舉變量);
4.2 IntPopup
int變量 = EditorGUILayout.IntPopup("整數(shù)單選框", int變量, 字符串?dāng)?shù)組, int數(shù)組);
4.3 DropdownButton
EditorGUILayout.DropdownButton(new GUIContent("按鈕上文字"), FocusType.Passive)
- FocusType:枚舉時(shí)告訴 UI 系統(tǒng)能夠獲得鍵盤焦點(diǎn),當(dāng)用戶按 Tab 鍵時(shí)在控件之間進(jìn)行切換。
- Keyboard:該控件可接收鍵盤焦點(diǎn)。
- Passive:該控件不能接收鍵盤焦點(diǎn)。
4.4 代碼示例
public enum E_TestType
{One = 1,Two = 2,Three = 4,One_and_Two = 1 | 2,
}public class Lesson3 : EditorWindow
{[MenuItem("Unity編輯器拓展/Lesson3/EditorGUI知識(shí)講解窗口")]private static void OpenLesson3() {Lesson3 win = EditorWindow.GetWindow<Lesson3>("EditorGUI知識(shí)講解窗口");win.Show();}E_TestType type;E_TestType type2;string[] strs = { "選擇123", "選擇234", "選擇345" };int[] ints = { 123, 234, 345 };int num = 0;private void OnGUI() {// 枚舉選擇type = (E_TestType)EditorGUILayout.EnumPopup("枚舉選擇", type);type2 = (E_TestType)EditorGUILayout.EnumFlagsField("枚舉多選", type2);// 整數(shù)選擇控件// 返回值是整數(shù)數(shù)組當(dāng)中的某一個(gè)值num = EditorGUILayout.IntPopup("整數(shù)單選框", num, strs, ints);EditorGUILayout.LabelField(num.ToString());// 按下就響應(yīng)的按鈕if (EditorGUILayout.DropdownButton(new GUIContent("按鈕上文字"), FocusType.Passive))Debug.Log("按下就響應(yīng)");}
}

5 對(duì)象關(guān)聯(lián)、各類型輸入
5.1 ObjectField
對(duì)象變量 = EditorGUILayout.ObjectField(對(duì)象變量, typeof(對(duì)象類型), 是否允許關(guān)聯(lián)場(chǎng)景上對(duì)象資源) as 對(duì)象類型;
5.2 各類型輸入
-
int變量 = EditorGUILayout.IntField("Int輸入框", int變量);
-
long變量 = EditorGUILayout.LongField("long輸入框", long變量);
-
float變量 = EditorGUILayout.FloatField("Float 輸入:", float變量);
-
double變量 = EditorGUILayout.DoubleField("double 輸入:", double變量);
-
string變量 = EditorGUILayout.TextField("Text輸入:", string變量);
-
vector2變量 = EditorGUILayout.Vector2Field("Vec2輸入: ", vector2變量);
-
vector3變量 = EditorGUILayout.Vector3Field("Vec3輸入: ", vector3變量);
-
vector4變量 = EditorGUILayout.Vector4Field("Vec4輸入: ", vector4變量);
-
rect變量 = EditorGUILayout.RectField("rect輸入: ", rect變量);
-
bounds變量 = EditorGUILayout.BoundsField("Bounds輸入: ", bounds變量);
-
boundsInt變量 = EditorGUILayout.BoundsIntField("Bounds輸入: ", boundsInt變量);
? 注意:EditorGUILayout 中 Delayed 開頭的輸入控件和普通輸入控件最主要的區(qū)別是:在用戶按 Enter 鍵或?qū)⒔裹c(diǎn)從字段移開之前,返回值不會(huì)更改。
5.3 代碼示例
public class Lesson3 : EditorWindow
{[MenuItem("Unity編輯器拓展/Lesson3/EditorGUI知識(shí)講解窗口")]private static void OpenLesson3() {Lesson3 win = EditorWindow.GetWindow<Lesson3>("EditorGUI知識(shí)講解窗口");win.Show();}GameObject obj;int i;int i2;float f;double d;long l;string str;Vector2 vec2;Vector3 vec3;Vector4 vec4;Rect rect;Bounds bounds;BoundsInt boundsInt;private void OnGUI() {// 對(duì)象關(guān)聯(lián)obj = EditorGUILayout.ObjectField("關(guān)聯(lián)資源對(duì)象", obj, typeof(GameObject), false) as GameObject;// 各類型輸入i = EditorGUILayout.IntField("Int輸入框", i);EditorGUILayout.LabelField(i.ToString());l = EditorGUILayout.LongField("long輸入框", l);f = EditorGUILayout.FloatField("Float 輸入:", f);d = EditorGUILayout.DoubleField("double 輸入:", d);str = EditorGUILayout.TextField("Text輸入:", str);vec2 = EditorGUILayout.Vector2Field("Vec2輸入: ", vec2);vec3 = EditorGUILayout.Vector3Field("Vec3輸入: ", vec3);vec4 = EditorGUILayout.Vector4Field("Vec4輸入: ", vec4);rect = EditorGUILayout.RectField("rect輸入: ", rect);bounds = EditorGUILayout.BoundsField("Bounds輸入: ", bounds);boundsInt = EditorGUILayout.BoundsIntField("Bounds輸入: ", boundsInt);// 注意:EditorGUILayout 中 Delayed 開頭的輸入控件和普通輸入控件最主要的區(qū)別是:// 在用戶按 Enter 鍵或?qū)⒔裹c(diǎn)從字段移開之前,返回值不會(huì)更改。i2 = EditorGUILayout.DelayedIntField("Int輸入框", i2);EditorGUILayout.LabelField(i2.ToString());}
}

6 折疊、折疊組
6.1 Foldout
bool變量 = EditorGUILayout.Foldout(bool變量, "標(biāo)題名");
6.2 BeginFoldoutHeaderGroup / EndFoldoutHeaderGroup
-
bool變量 = EditorGUILayout.BeginFoldoutHeaderGroup(bool變量, "標(biāo)題名");
...
EditorGUILayout.EndFoldoutHeaderGroup();
? 折疊組會(huì)有高亮加粗的顯示,而普通折疊沒有。

6.3 代碼示例
public enum E_TestType
{One = 1,Two = 2,Three = 4,One_and_Two = 1 | 2,
}public class Lesson3 : EditorWindow
{[MenuItem("Unity編輯器拓展/Lesson3/EditorGUI知識(shí)講解窗口")]private static void OpenLesson3() {Lesson3 win = EditorWindow.GetWindow<Lesson3>("EditorGUI知識(shí)講解窗口");win.Show();}E_TestType type;E_TestType type2;string[] strs = { "選擇123", "選擇234", "選擇345" };int[] ints = { 123, 234, 345 };int num = 0;GameObject obj;int i;int i2;float f;double d;long l;string str;Vector2 vec2;Vector3 vec3;Vector4 vec4;Rect rect;Bounds bounds;BoundsInt boundsInt;bool isHide;bool isHideGroup;private void OnGUI() {isHide = EditorGUILayout.Foldout(isHide, "折疊控件", false);if (isHide) {// 枚舉選擇type = (E_TestType)EditorGUILayout.EnumPopup("枚舉選擇", type);type2 = (E_TestType)EditorGUILayout.EnumFlagsField("枚舉多選", type2);// 整數(shù)選擇控件// 返回值是整數(shù)數(shù)組當(dāng)中的某一個(gè)值num = EditorGUILayout.IntPopup("整數(shù)單選框", num, strs, ints);EditorGUILayout.LabelField(num.ToString());// 按下就響應(yīng)的按鈕if (EditorGUILayout.DropdownButton(new GUIContent("按鈕上文字"), FocusType.Passive))Debug.Log("按下就響應(yīng)");}isHideGroup = EditorGUILayout.BeginFoldoutHeaderGroup(isHideGroup, "折疊組控件");if (isHideGroup) {// 對(duì)象關(guān)聯(lián)obj = EditorGUILayout.ObjectField("關(guān)聯(lián)資源對(duì)象", obj, typeof(GameObject), false) as GameObject;// 各類型輸入i = EditorGUILayout.IntField("Int輸入框", i);EditorGUILayout.LabelField(i.ToString());l = EditorGUILayout.LongField("long輸入框", l);f = EditorGUILayout.FloatField("Float 輸入:", f);d = EditorGUILayout.DoubleField("double 輸入:", d);str = EditorGUILayout.TextField("Text輸入:", str);vec2 = EditorGUILayout.Vector2Field("Vec2輸入: ", vec2);vec3 = EditorGUILayout.Vector3Field("Vec3輸入: ", vec3);vec4 = EditorGUILayout.Vector4Field("Vec4輸入: ", vec4);rect = EditorGUILayout.RectField("rect輸入: ", rect);bounds = EditorGUILayout.BoundsField("Bounds輸入: ", bounds);boundsInt = EditorGUILayout.BoundsIntField("Bounds輸入: ", boundsInt);// 注意:EditorGUILayout 中 Delayed 開頭的輸入控件和普通輸入控件最主要的區(qū)別是:// 在用戶按 Enter 鍵或?qū)⒔裹c(diǎn)從字段移開之前,返回值不會(huì)更改。i2 = EditorGUILayout.DelayedIntField("Int輸入框", i2);EditorGUILayout.LabelField(i2.ToString());}EditorGUILayout.EndFoldoutHeaderGroup();}
}

7 開關(guān)、開關(guān)組
7.1 Toggle / ToggleLeft
-
普通開關(guān)
bool變量 = EditorGUILayout.Toggle("普通開關(guān)", bool變量);
-
左側(cè)開關(guān)
bool變量 = EditorGUILayout.ToggleLeft("開關(guān)在左側(cè)", bool變量);
7.2 BeginToggleGroup / EndToggleGroup
-
bool變量 = EditorGUILayout.BeginToggleGroup("開關(guān)組", bool變量);
...
EditorGUILayout.EndToggleGroup();
7.3 代碼示例
public class Lesson3 : EditorWindow
{[MenuItem("Unity編輯器拓展/Lesson3/EditorGUI知識(shí)講解窗口")]private static void OpenLesson3() {Lesson3 win = EditorWindow.GetWindow<Lesson3>("EditorGUI知識(shí)講解窗口");win.Show();}bool isTog;bool isTogLeft;bool isTogGroup;private void OnGUI() {// 開關(guān)組控件isTogGroup = EditorGUILayout.BeginToggleGroup("開關(guān)組控件", isTogGroup);// 開關(guān)控件isTog = EditorGUILayout.Toggle("開關(guān)控件", isTog);isTogLeft = EditorGUILayout.ToggleLeft("左側(cè)開關(guān)", isTogLeft);EditorGUILayout.EndToggleGroup();}
}

8 滑動(dòng)條、雙滑塊滑動(dòng)條
8.1 Slider / IntSlider
float變量 = EditorGUILayout.Slider("滑動(dòng)條", float變量, 最小值, 最大值);
int變量 = EditorGUILayout.IntSlider("整數(shù)值滑動(dòng)條", int變量, 最小值, 最大值);
8.2 MinMaxSlider
EditorGUILayout.MinMaxSlider("雙塊滑動(dòng)條", ref 左側(cè)值, ref 右側(cè)值, 最小值, 最大值);
? 沒有返回值,通過 ref 關(guān)鍵字修改數(shù)值。
8.3 代碼示例
public class Lesson3 : EditorWindow
{[MenuItem("Unity編輯器拓展/Lesson3/EditorGUI知識(shí)講解窗口")]private static void OpenLesson3() {Lesson3 win = EditorWindow.GetWindow<Lesson3>("EditorGUI知識(shí)講解窗口");win.Show();}float fSlider;int iSlider;float leftV;float rightV;private void OnGUI() {// 滑動(dòng)條fSlider = EditorGUILayout.Slider("滑動(dòng)條", fSlider, 0, 10);iSlider = EditorGUILayout.IntSlider("整形滑動(dòng)條", iSlider, 0, 10);// 雙塊滑動(dòng)條EditorGUILayout.MinMaxSlider("雙塊滑動(dòng)條", ref leftV, ref rightV, 0, 10);EditorGUILayout.LabelField(leftV.ToString());EditorGUILayout.LabelField(rightV.ToString());}
}

9 幫助框、間隔
9.1 HelpBox
EditorGUILayout.HelpBox("一般提示", MessageType.None);
EditorGUILayout.HelpBox("感嘆號(hào)提示", MessageType.Info);
EditorGUILayout.HelpBox("警告符號(hào)提示", MessageType.Warning);
EditorGUILayout.HelpBox("錯(cuò)誤符號(hào)提示", MessageType.Error);
9.2 Space
EditorGUILayout.Space(10); // 間隔 10 個(gè)單位
9.3 代碼示例
public class Lesson3 : EditorWindow
{[MenuItem("Unity編輯器拓展/Lesson3/EditorGUI知識(shí)講解窗口")]private static void OpenLesson3() {Lesson3 win = EditorWindow.GetWindow<Lesson3>("EditorGUI知識(shí)講解窗口");win.Show();}private void OnGUI() {EditorGUILayout.HelpBox("一般提示", MessageType.None);EditorGUILayout.Space(10);EditorGUILayout.HelpBox("感嘆號(hào)提示", MessageType.Info);EditorGUILayout.Space(50);EditorGUILayout.HelpBox("警告符號(hào)提示", MessageType.Warning);EditorGUILayout.Space(100);EditorGUILayout.HelpBox("錯(cuò)誤符號(hào)提示", MessageType.Error);}
}

10 動(dòng)畫曲線、布局
10.1 CurveField
AnimationCurve變量 = EditorGUILayout.CurveField("動(dòng)畫曲線:", AnimationCurve變量);
10.2 布局相關(guān) API
-
水平布局
EditorGUILayout.BeginHorizontal(); // 開始水平布局
...
EditorGUILayout.EndHorizontal(); // 結(jié)束水平布局
-
垂直布局
EditorGUILayout.BeginVertical(); // 開始垂直布局
...
EditorGUILayout.EndVertical(); // 結(jié)束垂直布局
-
滾動(dòng)視圖
Vector2布局 = EditorGUILayout.BeginScrollView(Vector2布局); // 開啟滾動(dòng)視圖
...
EditorGUILayout.EndScrollView(); // 結(jié)束滾動(dòng)視圖
10.3 代碼示例
public class Lesson3 : EditorWindow
{[MenuItem("Unity編輯器拓展/Lesson3/EditorGUI知識(shí)講解窗口")]private static void OpenLesson3() {Lesson3 win = EditorWindow.GetWindow<Lesson3>("EditorGUI知識(shí)講解窗口");win.Show();}bool isTog;bool isTogLeft;bool isTogGroup;float fSlider;int iSlider;float leftV;float rightV;AnimationCurve curve = new AnimationCurve();Vector2 vec2Pos;private void OnGUI() {vec2Pos = EditorGUILayout.BeginScrollView(vec2Pos); // 開啟滾動(dòng)視圖// 開關(guān)組控件isTogGroup = EditorGUILayout.BeginToggleGroup("開關(guān)組控件", isTogGroup);// 開關(guān)控件isTog = EditorGUILayout.Toggle("開關(guān)控件", isTog);isTogLeft = EditorGUILayout.ToggleLeft("左側(cè)開關(guān)", isTogLeft);EditorGUILayout.EndToggleGroup();// 滑動(dòng)條fSlider = EditorGUILayout.Slider("滑動(dòng)條", fSlider, 0, 10);iSlider = EditorGUILayout.IntSlider("整形滑動(dòng)條", iSlider, 0, 10);// 雙塊滑動(dòng)條EditorGUILayout.MinMaxSlider("雙塊滑動(dòng)條", ref leftV, ref rightV, 0, 10);EditorGUILayout.LabelField(leftV.ToString());EditorGUILayout.LabelField(rightV.ToString());// 幫助框控件EditorGUILayout.HelpBox("一般提示", MessageType.None);EditorGUILayout.Space(10);EditorGUILayout.HelpBox("感嘆號(hào)提示", MessageType.Info);EditorGUILayout.Space(50);EditorGUILayout.HelpBox("警告符號(hào)提示", MessageType.Warning);EditorGUILayout.Space(100);EditorGUILayout.HelpBox("錯(cuò)誤符號(hào)提示", MessageType.Error);// 間隔控件EditorGUILayout.EndScrollView(); // 結(jié)束滾動(dòng)視圖// 動(dòng)畫曲線控件curve = EditorGUILayout.CurveField("曲線控件", curve);// 布局APIEditorGUILayout.BeginHorizontal(); // 開始水平布局EditorGUILayout.LabelField("123123");EditorGUILayout.LabelField("123123");EditorGUILayout.LabelField("123123");EditorGUILayout.EndHorizontal(); // 結(jié)束水平布局EditorGUILayout.BeginVertical(); // 開始垂直布局EditorGUILayout.LabelField("123123");EditorGUILayout.LabelField("123123");EditorGUILayout.LabelField("123123");EditorGUILayout.EndVertical(); // 結(jié)束垂直布局}
}
