46.EditorApplication

46.EditorApplication


46.1 知识点

EditorApplication公共类是用来干什么的

它是 Unity 编辑器中的一个公共类,主要提供了一些和编辑器本身相关的功能,比如编辑器事件监听(播放、暂停等)、生命周期判断(是否运行中、暂停中、编译中)、编辑器进入播放模式、退出播放模式等等功能。

创建自定义面板用于进行知识讲解

public class MyEditorApplicationLearnWindow : EditorWindow
{
    [MenuItem("编辑器拓展教程/MyEditorApplicationLearnWindow")]
    private static void OpenMyEditorApplicationLearnWindow()
    {
        MyEditorApplicationLearnWindow win =
            EditorWindow.GetWindow<MyEditorApplicationLearnWindow>("EditorApplication知识学习");
        win.Show();
    }
}

常用API

监听编辑器事件

  • EditorApplication.update:每帧更新事件,可以用于在编辑器中执行一些逻辑。
  • EditorApplication.hierarchyChanged:层级视图变化事件,当场景中的对象发生变化时触发。
  • EditorApplication.projectChanged:项目变化事件,当项目中的资源发生变化时触发。
  • EditorApplication.playModeStateChanged:编辑器播放状态变化时触发。
  • EditorApplication.pauseStateChanged:编辑器暂停状态变化时触发。
private void OnEnable()
{
    EditorApplication.update += MyUpdate;
}

private void OnDestroy()
{
    EditorApplication.update -= MyUpdate;
}

void MyUpdate()
{
    // Debug.Log("更新");  

    // 管理编辑器生命周期相关
    if (EditorApplication.isPlaying)
    {
        Debug.Log("处于运行播放状态");
    }
}

获取Unity应用程序路径相关

  • EditorApplication.applicationContentsPath:Unity安装目录Data路径。
  • EditorApplication.applicationPath:Unity安装目录可执行程序路径。
private void OnGUI()
{
    if (GUILayout.Button("打印Unity安装路径"))
    {
        Debug.Log(EditorApplication.applicationContentsPath);//D:/Software/Unity/UnityEditor/2022.3.17f1c1/Editor/Data
        Debug.Log(EditorApplication.applicationPath);//D:/Software/Unity/UnityEditor/2022.3.17f1c1/Editor/Unity.exe
    }

    // 常用方法
    if (GUILayout.Button("进入播放模式"))
    {
        EditorApplication.EnterPlaymode();
    }
    if (GUILayout.Button("退出播放模式"))
    {
        EditorApplication.ExitPlaymode();
    }
}

更多内容

官方文档:


46.2 知识点代码

Lesson46_EditorApplication

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Lesson46_EditorApplication : MonoBehaviour
{
    void Start()
    {
        #region 知识点一 EditorApplication公共类是用来干什么的?

        //它是 Unity 编辑器中的一个公共类,它主要提供了一些和编辑器本身相关的一些功能
        //比如 编辑器事件监听(播放、暂停等)、生命周期判断(是否运行中、暂停中、编译中)
        //     编辑器进入播放模式、退出播放模式 等等功能

        #endregion

        #region 知识点二 创建自定义面板用于进行知识讲解

        #endregion

        #region 知识点三 常用API

        //1.监听编辑器事件
        //  EditorApplication.update:每帧更新事件,可以用于在编辑器中执行一些逻辑
        //  EditorApplication.hierarchyChanged:层级视图变化事件,当场景中的对象发生变化时触发
        //  EditorApplication.projectChanged:项目变化事件,当项目中的资源发生变化时触发
        //  EditorApplication.playModeStateChanged:编辑器播放状态变化时触发
        //  EditorApplication.pauseStateChanged:编辑器暂停状态变化时触发

        //2.管理编辑器生命周期相关
        //  EditorApplication.isPlaying:判断当前是否处于游戏运行状态。
        //  EditorApplication.isPaused:判断当前游戏是否处于暂停状态。
        //  EditorApplication.isCompiling:判断Unity编辑器是否正在编译代码
        //  EditorApplication.isUpdating:判断Unity编辑器是否正在刷新AssetDatabase

        //3.获取Unity应用程序路径相关
        //  EditorApplication.applicationContentsPath:Unity安装目录Data路径
        //  EditorApplication.applicationPath:Unity安装目录可执行程序路径

        //4.常用方法
        //  EditorApplication.Exit(0):退出Unity编辑器
        //  EditorApplication.ExitPlaymode():退出播放模式,切换到编辑模式
        //  EditorApplication.EnterPlaymode():进入播放模式

        #endregion

        #region 知识点四 更多内容

        //官方文档
        //EditorApplication: https://docs.unity3d.com/2022.3/Documentation/ScriptReference/EditorApplication.html
        //EditorSceneManager:https://docs.unity3d.com/2022.3/Documentation/ScriptReference/SceneManagement.EditorSceneManager.html

        #endregion
    }
}

MyEditorApplicationLearnWindow

using System;
using UnityEditor;
using UnityEngine;

public class MyEditorApplicationLearnWindow : EditorWindow
{
    [MenuItem("编辑器拓展教程/MyEditorApplicationLearnWindow")]
    private static void OpenMyEditorApplicationLearnWindow()
    {
        MyEditorApplicationLearnWindow win =
            EditorWindow.GetWindow<MyEditorApplicationLearnWindow>("EditorApplication知识学习");
        win.Show();
    }

    //1.监听编辑器事件
    //  EditorApplication.update:每帧更新事件,可以用于在编辑器中执行一些逻辑
    //  EditorApplication.hierarchyChanged:层级视图变化事件,当场景中的对象发生变化时触发
    //  EditorApplication.projectChanged:项目变化事件,当项目中的资源发生变化时触发
    //  EditorApplication.playModeStateChanged:编辑器播放状态变化时触发
    //  EditorApplication.pauseStateChanged:编辑器暂停状态变化时触发
    private void OnEnable()
    {
        EditorApplication.update += MyUpdate;
    }

    private void OnDestroy()
    {
        EditorApplication.update -= MyUpdate;
    }

    void MyUpdate()
    {
        // Debug.Log("更新");  

        //2.管理编辑器生命周期相关
        //  EditorApplication.isPlaying:判断当前是否处于游戏运行状态。
        //  EditorApplication.isPaused:判断当前游戏是否处于暂停状态。
        //  EditorApplication.isCompiling:判断Unity编辑器是否正在编译代码
        //  EditorApplication.isUpdating:判断Unity编辑器是否正在刷新AssetDatabase
        if (EditorApplication.isPlaying)
        {
            Debug.Log("处于运行播放状态");
        }
    }

    private void OnGUI()
    {
        //3.获取Unity应用程序路径相关
        //  EditorApplication.applicationContentsPath:Unity安装目录Data路径
        //  EditorApplication.applicationPath:Unity安装目录可执行程序路径
        if (GUILayout.Button("打印Unity安装路径"))
        {
            Debug.Log(EditorApplication.applicationContentsPath);//D:/Software/Unity/UnityEditor/2022.3.17f1c1/Editor/Data
            Debug.Log(EditorApplication.applicationPath);//D:/Software/Unity/UnityEditor/2022.3.17f1c1/Editor/Unity.exe
        }

        
        //4.常用方法
        //  EditorApplication.Exit(0):退出Unity编辑器
        //  EditorApplication.ExitPlaymode():退出播放模式,切换到编辑模式
        //  EditorApplication.EnterPlaymode():进入播放模式
        if (GUILayout.Button("进入播放模式"))
        {
            EditorApplication.EnterPlaymode();
        }
        if (GUILayout.Button("退出播放模式"))
        {
            EditorApplication.ExitPlaymode();
        }
    }
}


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com

×

喜欢就点赞,疼爱就打赏