前言
做编辑器的时候有时会需要改变窗口的对焦。现在总结一下常用的切换窗口方法。还有就是编辑器模式下启动游戏。
效果
切换窗口对焦
启动和暂停
思路
- 窗口类名应该和窗口名差不多,到UnityEditor的文档里面去搜索关键字,看看有没有有用的信息
- 找不到其他窗口名的时候,就百度名字,多翻翻。。
脚本
直接贴整个编辑器脚本
using System;
using UnityEditor;
using UnityEngine;public class EditorTest : EditorWindow
{
[MenuItem("EditorTest/Test")]
private static void Open()
{
EditorTest instance = EditorWindow.GetWindow<EditorTest>();
instance.Show();
}
void OnGUI()
{
//得到对焦的窗口名
EditorGUILayout.LabelField(EditorWindow.focusedWindow!=null? EditorWindow.focusedWindow.ToString():"");
if (GUILayout.Button("FocusScene"))
{
//如果能直接获取对象,就使用FocusWindow
EditorWindow.FocusWindowIfItsOpen<SceneView>();
}
if (GUILayout.Button("FocusGame"))
{
//第一种获取Tpye的方法
Type T = Type.GetType("UnityEditor.GameView,UnityEditor");
//需要通过反射的,就使用GetWindow
EditorWindow.GetWindow(T, false, "GameView", true);
}
if (GUILayout.Button("FocueProject"))
{
//第二种获取Tpye的方法
Type T = System.Reflection.Assembly.Load("UnityEditor").GetType("UnityEditor.ProjectBrowser");
EditorWindow.GetWindow(T, false, "Project", true);
}
if (GUILayout.Button("FocueHierarchy"))
{
Type T = Type.GetType("UnityEditor.SceneHierarchyWindow,UnityEditor");
EditorWindow.GetWindow(T, false, "Hierarchy", true);
}
if (GUILayout.Button("FocueInspector"))
{
Type T = Type.GetType("UnityEditor.InspectorWindow,UnityEditor");
EditorWindow.GetWindow(T, false, "Inspector", true);
}
if (GUILayout.Button("FocueConsole"))
{
Type T = Type.GetType("UnityEditor.ConsoleWindow,UnityEditor");
EditorWindow.GetWindow(T, false, "Console", true);
}
//启动
if (GUILayout.Button("Play"))
{
EditorApplication.isPlaying = true;
}
//暂停
if (GUILayout.Button("Paused"))
{
EditorApplication.isPaused = true;
}
}
}
注意点
窗口对焦除了Scene场景,Unity是有开放能直接获取,其余的演示图那几个界面都不能直接获取,需要通过反射来得到。
如果不知道场景名称,可以通过EditorWindow.focusedWindow.ToString()来得到窗口名称
参考文档
1.https://blog.csdn.net/shuai1210/article/details/61618287
2.https://www.cnblogs.com/CaomaoUnity3d/p/4698538.html
3.https://www.cnblogs.com/angel271/p/5644554.html
【测试环境: 2017.4.3f1】