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

本文介绍如何在Unity编辑器中通过脚本实现不同窗口间的焦点切换,包括场景视图、游戏视图等,并提供了启动和暂停游戏的方法。通过反射获取窗口类型,适用于无法直接访问的窗口。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

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

效果

切换窗口对焦
窗口对焦

启动和暂停
启动和暂停

思路

  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】

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值