Unity 脚本 API 中文版
链接: https://docs.unity3d.com/cn/2019.4/ScriptReference/
创建自定义窗口
public class MyWindow : EditorWindow//继承unity内置EditorWindow类
{
[MenuItem("Window/我的自定义窗口")]
private static void ShowWindow()
{
//1.用GetWindow方法创建的窗口,只可以打开一个
MyWindow window = GetWindow<MyWindow>("我的窗口");//字符串为窗口标题
//2.用CreateWindow方法创建的窗口,可以打开很多个
MyWindow window = CreateWindow<MyWindow>("我的窗口");
}
private void OnGUI()
{
//GUI布局
}
}
GUILayout.Label
基础
GUILayout.Label("Label");
设置样式和大小
GUIStyle lblStyle = GUI.skin.label;//在unity默认的样式上面修改,如果使用new GUIStyle()的话,绘制出来的Label只有你自己设置的样式
lblStyle.alignment = TextAnchor.MiddleLeft;//
GUILayout.Label("Label", lblStyle, GUILayout.Width(50), GUILayout.Height(50));//必须指定大小,文字位置才有效
使用 GUIContent 代替文字
//无提示写法
GUIContent lblIcon = EditorGUIUtility.IconContent("console.infoicon");//根据icon名字获取unity内置的icon
GUILayout.Label(lblIcon);
//有提示写法
//(1)图标的提示:要加 |
GUIContent lblIcon = EditorGUIUtility.IconContent("console.infoicon", "|这是图标Label");//根据icon名字获取unity内置的icon
GUILayout.Label(lblIcon);
//(2)文字的提示:不用加 |
GUIContent lblStr = new GUIContent("console.infoicon", "这是文字Label");
GUILayout.Label(lblStr);
unity Api
GUILayout 滚动视图
滚动视图由GUILayout.BeginScrollView()和GUILayout.EndScrollView()组成,需要滚动的元素放在它们中间
void OnGUI()
{
scrollPosition = GUILayout.BeginScrollView(scrollPosition,GUILayout.Width(100),GUILayout.Height(500));
//放在里面的元素需要是GUILayout类的,比如GUI.Button是不会有滚动效果的
for(int i = 0; i < 100; i++)
{
GUILayout.Label(i.ToString());
}
GUILayout.EndScrollView();
}
private Vector2 scrollPosition = Vector2.zero;
GUIStyle
统一更改所有按钮的样式
void OnGUI()
{
GUIStyle btnStyle = GUI.skin.button;
btnStyle.alignment = TextAnchor.MiddleLeft;
btnStyle.normal.textColor = Color.white;
btnStyle.richText = true;//支持渲染HTML标签的文本: <strong>HTML</strong>
GUILayout.Button("Button", btnStyle, GUILayout.Width(50));
}
自定义某个按钮的样式
void OnGUI()
{
GUIStyle goTopBtnStyle = new GUIStyle(GUI.skin.button);
goTopBtnStyle.alignment = TextAnchor.UpperLeft;
GUILayout.Button("Button", goTopBtnStyle , GUILayout.Width(50));
}
GUI_Line
用来分割布局内容
void OnGUI()
{
UnityEditorExtensions.GUI_Line();
}
GUILayout.HorizontalScope() 和 GUILayout.FlexibleSpace
用该元素可以实现水平居中效果
void OnGUI()
{
//创建一个横向的区域
using (new GUILayout.HorizontalScope())
{
GUILayout.FlexibleSpace();
_selectedTabID = GUILayout.Toolbar(_selectedTabID, _tabNames, GUILayout.Height(25));
GUILayout.FlexibleSpace();
}
}
private int _selectedTabID = 0;
private string[] _tabNames = new string[] {
"tab01", "tab02", "tab03" };
效果
unity Api
EditorGUI.BeginChangeCheck()
和EditorGUI.EndChangeCheck()结合使用
假如你想当一个Popup元素的选中值改变时候才作出相应操作,你可以这样写:
int popupInt = 0;
string[] popupOptions = {
"50", "100" };
void OnGUI()
{
EditorGUI.BeginChangeCheck();
popupInt = EditorGUILayout.Popup(popupInt, popupOptions);
if(EditorGUI.EndChangeCheck())
{
switch(popupInt)
{
case 0:
//相应操作
break;
case 1:
//相应操作
break;
}
}
}
unity Api
GenericMenu
类似EditorGUILayout.Popup的一个菜单选项,跟Popup不同的是
1.GenericMenu菜单弹出的位置起点是鼠标点击的位置
2.可以多选
3.可以创建嵌套菜单
void OnGUI()
{
using (new GUILayout.HorizontalScope())
{
GUILayout.FlexibleSpace();
if (EditorGUILayout.DropdownButton(new GUIContent("DropdownButton"), FocusType.Passive))
{
GenericMenu menu = new GenericMenu();
//第二个参数控制是否选中,可以根据实际情况控制,例如:选中就显示某个元素,可根据该元素的可见性来控制
menu.AddItem(new GUIContent("红色"), redCheck, callback, Color.red);
menu.AddItem(new GUIContent("黄色"), yellowCheck, callback, Color.yellow);
menu.AddItem(new GUIContent("青色"), cyanCheck, callback, Color.cyan);
menu.AddItem(new GUIContent("其他/白色"), false, callback, Color.white);
menu.ShowAsContext();
}
GUILayout.FlexibleSpace();
}
using (new GUILayout.HorizontalScope())
{
GUILayout.FlexibleSpace();
redCheck = GUILayout.Toggle(redCheck, "红色");
yellowCheck = GUILayout.Toggle(yellowCheck, "黄色");
cyanCheck = GUILayout.Toggle(cyanCheck, "青色");
GUILayout.FlexibleSpace();
}
}
void callback(object color)
{
if (color.Equals(Color.red)) redCheck = !redCheck;
else if (color.Equals(Color.yellow)) yellowCheck = !yellowCheck;
else if (color.Equals(Color.cyan)) cyanCheck = !cyanCheck;
}
bool redCheck, yellowCheck, cyanCheck;
效果
unity Api