一,PopupWindow
代码:
public class PopupWindowExample : EditorWindow
{
[MenuItem("MyEditor/11.PopupWindow/Open")]
static void Open()
{
GetWindow<PopupWindowExample>().Show();
}
private Rect mButtonRect;
private void OnGUI()
{
if (GUILayout.Button("PopUpButton", GUILayout.Width(200)))
{
//显示子界面。
PopupWindow.Show(mButtonRect,new PopwindowContentExample());
}
if (Event.current.type == EventType.Repaint)
mButtonRect = GUILayoutUtility.GetLastRect();
}
public class PopwindowContentExample : PopupWindowContent
{
private bool mToogle1 = true;
private bool mToogle2 = true;
private bool mToogle3 = true;
public override void OnGUI(Rect rect)
{
GUILayout.Label("Pop Options Example", EditorStyles.boldLabel);
//显示一个小按钮
mToogle1 = EditorGUILayout.Toggle("ToogOne", mToogle1);
mToogle2 = EditorGUILayout.Toggle("ToogTwo", mToogle2);
mToogle3 = EditorGUILayout.Toggle("Toogthere", mToogle3);
}
//开启方法
public override void OnOpen()
{
Debug.Log("On Open");
}
//关闭方案
public override void OnClose()
{
Debug.Log("On Close");
}
}
}
效果:一个可以点击开启的子界面。
二,AdvancedDropdown高级下拉菜单
效果:记得添加组件的搜索框吗?这个就是那个东西。
代码:
public class AdvancedDropdownExample : EditorWindow
{
[MenuItem("MyEditor/12.PopWindow/Open")]
static void Open()
{
CreateInstance<AdvancedDropdownExample>().Show();
}
private void OnGUI()
{
var rect = GUILayoutUtility.GetRect(new GUIContent("Show"), EditorStyles.toolbarButton);
if (GUI.Button(rect, new GUIContent("Show"), EditorStyles.toolbarButton))
{
var dropdown = new WeekdaysDropdown(new AdvancedDropdownState());
dropdown.Show(rect);
}
}
public class WeekdaysDropdown : AdvancedDropdown
{
public WeekdaysDropdown(AdvancedDropdownState state) : base(state)
{
}
protected override AdvancedDropdownItem BuildRoot()
{
//这个的添加,类似于一个,又一个的树状图
var root = new AdvancedDropdownItem("Weekdays");
var fiestHarf = new AdvancedDropdownItem("First Half");
var secondHalf = new AdvancedDropdownItem("Second Half");
var weekend = new AdvancedDropdownItem("Weekend");
fiestHarf.AddChild(new AdvancedDropdownItem("Monday"));
fiestHarf.AddChild(new AdvancedDropdownItem("Tuesday"));
secondHalf.AddChild(new AdvancedDropdownItem("Thursday"));
secondHalf.AddChild(new AdvancedDropdownItem("friday"));
secondHalf.AddChild(new AdvancedDropdownItem("Saturday"));
secondHalf.AddChild(new AdvancedDropdownItem("Starsday"));
//最后要将这些都添加到父节点中,最后返回出去
root.AddChild(fiestHarf);
root.AddChild(secondHalf);
root.AddChild(weekend);
return root;
}
/// <summary>
/// 这个方法会返回选择的Advanced 告知名字,然后你就可以通过这些名字来执行具体逻辑。
/// </summary>
/// <param name="item"></param>
protected override void ItemSelected(AdvancedDropdownItem item)
{
Debug.Log("通知的名字" + item.name);
}
}
}
效果:
三,EditorUtility窗口方法
作用:很多都是Unity系统的方法。例如报错提示音,启动项目。暂停项目关闭项目等等。
官网Api
代码:
public class EditorUtilityExample : EditorWindow
{
[MenuItem("MyEditor/13.EditorUtilioty/Open")]
public static void Open()
{
GetWindow<EditorUtilityExample>().Show();
}
/// <summary>
/// 渲染
/// </summary>
private void OnGUI()
{
GUILayout.BeginHorizontal();
if (GUILayout.Button("DisplayProgressBar"))
{
//用来显示那个令人厌恶的加载进度条
EditorUtility.DisplayProgressBar("DisPlayProgressBar","info",0.65f);
}
if (GUILayout.Button("ClearProgressBar"))
{
//移除加载进度条
EditorUtility.ClearProgressBar();
}
GUILayout.EndHorizontal();
if (GUILayout.Button("DisPlayDialog"))
{
//确认弹窗
Debug.Log(EditorUtility.DisplayDialog("Displaylog","message","Ok","cancel"));
}
if (GUILayout.Button("Beep"))
{
//文字是无法传达声音的,但是这个声音就是那个滴零声
EditorApplication.Beep();
}
GUILayout.BeginHorizontal();
if (GUILayout.Button("EnterPlayMode"))
{
//运行项目
EditorApplication.EnterPlaymode();
}
if (GUILayout.Button("ExitPlayMode"))
{
//结束运行
EditorApplication.ExitPlaymode();
}
if (GUILayout.Button("Step"))
{
//暂停项目
EditorApplication.Step();
}
GUILayout.EndHorizontal();
}
}
效果:
DisPlayProgressBar
DisPlayLog
EnterPlayMode