【编辑器】Unity窗口对焦切换和启动游戏

前言

做编辑器的时候有时会需要改变窗口的对焦。现在总结一下常用的切换窗口方法。还有就是编辑器模式下启动游戏。

效果

切换窗口对焦
窗口对焦

启动和暂停
启动和暂停

思路

  1. 窗口类名应该和窗口名差不多,到UnityEditor的文档里面去搜索关键字,看看有没有有用的信息
  2. 找不到其他窗口名的时候,就百度名字,多翻翻。。

脚本

直接贴整个编辑器脚本

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】

猜你喜欢

转载自blog.csdn.net/sinat_34870723/article/details/84620391
今日推荐