UEDL11-1——编辑器默认窗口相关

本章代码关键字

1
2
3
4
EditorUtility.DisplayDialog()            //显示提示窗口
EditorUtility.DisplayDialogComplex() //显示三键提示窗口
EditorUtility.DisplayProgressBar() //显示进度条
EditorUtility.ClearProgressBar() //关闭进度条

显示提示窗口

EditorUtility.DisplayDialog()​该方法会弹出一个提示窗口,
常用于用户二次确认某个逻辑,该方法会返回一个bool​值,返回用户是否点击了确认按钮,如果直接关闭提示窗口就会返回false

  • 参数一:窗口标题
  • 参数二:窗口显示消息
  • 参数三:确认键上显示的内容
  • 返回值:是否点击了确认按钮

注意:提示窗口显示会阻塞逻辑,即直到点击确认按钮或者关闭窗口前,编辑器的逻辑都会被阻塞

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
private void OnGUI()
{
if (GUILayout.Button("显示提示窗口"))
{
if (EditorUtility.DisplayDialog("测试窗口", "确定一定要做这件事情吗?", "确认执行"))
{
Debug.Log("确认执行");
}
else
{
Debug.Log("取消执行");
}
Debug.Log("窗口显示完毕");
}
}

显示效果:image

输出内容:image

显示三键提示面板

EditorUtility.DisplayDialogComplex()​该方法会弹出一个有三个按钮的提示窗口

  • 参数一:窗口标题

  • 参数二:窗口显示消息

  • 参数三:按钮1上显示的内容

  • 参数四:按钮3上显示的内容 (注意,是按钮3,不是2,以及,如果直接关闭了该窗口,则默认返回点击了按钮3的值,因此它常用于做关闭键)

  • 参数五:按钮2上显示的内容 (注意,是按钮2,不是3)

  • 返回值:返回点击的按钮对应的数字,对应关系为:

    • 0:按钮1按下
    • 1:按钮3按下(如果直接关闭了该窗口,则默认返回1,因此它常用于处理直接关闭窗口时执行的逻辑)
    • 2:按钮2按下

注意:提示窗口显示会阻塞逻辑,即直到点击某个按钮前,编辑器的逻辑都会被阻塞

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
private void OnGUI()
{
if (GUILayout.Button("显示三键提示窗口"))
{
int result = EditorUtility.DisplayDialogComplex("三键提示", "显示消息", "选项一", "关闭", "选项二");
switch (result)
{
case 0:
Debug.Log("选项1按下了");
break;
case 1:
Debug.Log("关闭按下了");
break;
case 2:
Debug.Log("选项2按下了");
break;
}
Debug.Log("三键窗口显示完毕");
}
}

显示效果:image

输出内容:image

进度条相关

  • 显示进度条:EditorUtility.DisplayProgressBar("进度条", "显示信息", 进度值0~1)
  • 关闭进度条:EditorUtility.ClearProgressBar()

注意:进度条窗口不会卡逻辑,但是需要配合关闭进度条使用

1
2
3
4
5
6
7
8
9
10
11
private void OnGUI()
{
if (GUILayout.Button("显示更新角度条"))
{
EditorUtility.DisplayProgressBar("进度条标题", "进度条显示内容", 0);
}
if (GUILayout.Button("关闭进度条"))
{
EditorUtility.ClearProgressBar();
}
}

显示效果:image

如果要更新进度条窗口上显示的角度等其他消息,重复执行该方法并传入不同的参数即可,
假设要模拟一个进度条缓慢增长:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
private float value;

[MenuItem("Unity编辑器拓展/Lesson38/EditorUtility知识讲解")]
private static void OpenLesson38Window()
{
Lesson38 window = EditorWindow.GetWindow<Lesson38>("EditorUtility知识讲解")
window.Show();
}

private void OnGUI()
{
if (GUILayout.Button("显示更新角度条"))
{
value += 0.1f;
EditorUtility.DisplayProgressBar("进度条标题", "进度条显示内容", value);
Debug.Log("进度条窗口显示完毕");
}
if (GUILayout.Button("关闭进度条"))
{
value = 0;
EditorUtility.ClearProgressBar();
}
}

显示效果(多次点击后):image