IMGUI
“即时模式”GUI 系统(也称为 IMGUI)是一个完全独立的功能系统,不同于 Unity 基于游戏对象的主 UI 系统。IMGUI 是一个代码驱动的 GUI 系统,主要用作程序员的工具。为了驱动该系统,需在实现脚本上调用 OnGUI 函数。
EditorWindow
1.继承EditorWindow
2.EditorWindow.GetWindow(typeof(MyWindow)).Show()显示窗口
3.在OnGui渲染窗口
GUILayout(编辑器,运行时可用)
GUILayout 类是 Unity GUI 的接口,并且具有自动布局功能。
UnityEngine.GUILayout - Unity 脚本 APIhttps://docs.unity.cn/cn/current/ScriptReference/GUILayout.html
GUI(编辑器,运行时可用)
GUI 类是 Unity GUI 的接口,并且具有手动定位功能。(对比GUILayout需要多传个Rect)
UnityEngine.GUI - Unity 脚本 APIhttps://docs.unity.cn/cn/current/ScriptReference/GUI.html
EditorGUILayout(编辑器可用)
EditorGUI 的自动布局版本。
EditorGUI(编辑器可用)
这些方法的运行方式与常规 GUI 函数十分相似。(对比 EditorGUILayout需要多传个Rect)
UnityEditor.EditorGUI - Unity 脚本 APIhttps://docs.unity.cn/cn/current/ScriptReference/EditorGUI.html
编辑器的简易框架(可以让你的编辑器更好的可视化管理)
using System;
using UnityEditor;
using UnityEngine;
public class MyWindow : EditorWindow
{
string myString = "Hello World";
bool groupEnabled;
bool myBool = true;
float myFloat = 1.23f;
bool isEnable = false;
bool isRotate = false;
bool isScale = false;
Color color;
//定义枚举
public enum ToolEnum
{
Basic,
Enable,
Rotate,
Scale,
Color,
Other,
}
ToolEnum selectId = ToolEnum.Basic;
[MenuItem("Window/My Window")]
static void Init()
{
MyWindow window = (MyWindow)EditorWindow.GetWindow(typeof(MyWindow));
window.Show();
}
void OnGUI()
{
//渲染Toolbar
selectId = (ToolEnum)GUILayout.Toolbar((int)selectId, Enum.GetNames(typeof(ToolEnum)));
if (selectId == ToolEnum.Basic)
{
Basic();
}
else if (selectId == ToolEnum.Enable)
{
isEnable = GUILayout.Toggle(isEnable, "IsEnable");
if (isEnable != GUI.enabled)
{
GUI.enabled = isEnable;
}
Basic();
}
else if (selectId == ToolEnum.Rotate)
{
isRotate = GUILayout.Toggle(isRotate, "IsRotate");
if (isRotate)
{
GUIUtility.RotateAroundPivot(45, new Vector2(100, 100));
}
Basic();
}
else if (selectId == ToolEnum.Scale)
{
isScale = GUILayout.Toggle(isScale, "IsScale");
if (isScale)
{
GUIUtility.ScaleAroundPivot(Vector2.one * 0.5f, new Vector2(100, 100));
}
Basic();
}
else if (selectId == ToolEnum.Color)
{
color = EditorGUILayout.ColorField(color);
GUI.color = color;
Basic();
}
}
private void Basic()
{
GUILayout.Label("Base Settings", EditorStyles.boldLabel);
myString = EditorGUILayout.TextField("Text Field", myString);
groupEnabled = EditorGUILayout.BeginToggleGroup("Optional Settings", groupEnabled);
myBool = EditorGUILayout.Toggle("Toggle", myBool);
myFloat = EditorGUILayout.Slider("Slider", myFloat, -3, 3);
EditorGUILayout.EndToggleGroup();
}
}
GUIContent
定义/渲染内容 ,包含图标,文本,提示
GUIStyle
定义/渲染方式,这让您能够更改或根据不同状态(例如,当鼠标悬停在控件上时)切换颜色、字体及其他细节。
UnityEngine.GUIStyle - Unity 脚本 APIhttps://docs.unity.cn/cn/current/ScriptReference/GUIStyle.html
GUISkin
定义 GUI 的外观和行为。GUISkin 包含 GUI 设置和 GUIStyle 对象的集合,它们共同指定 GUI 皮肤。
UnityEngine.GUISkin - Unity 脚本 APIhttps://docs.unity.cn/cn/current/ScriptReference/GUISkin.html
免费课程链接:
独立游戏《Unity打造关卡编辑器》Unity 独立游戏 关卡编辑器https://bycwedu.vipwan.cn/promotion_channels/72762192