47.CompilationPipeline

47.CompilationPipeline


47.1 知识点

CompilationPipeline公共类是用来做什么的

它是 Unity 编辑器中的一个公共类,用于处理代码编译相关的操作和事件的
对于我们来说,我们最常用的是利用它得知代码是否编译结束
比如动态生成脚本时,我们需要在编译结束后才能使用新的脚本

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

using UnityEditor;

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

常用内容

private void OnEnable()
{
    // CompilationPipeline.assemblyCompilationFinished
    // 命名空间:UnityEditor.Compilation;
    // 主要作用:当一个程序集编译结束会主动调用该回调函数
    // 传入的两个参数分别是
    // string arg1 : 编译完成的程序集名
    // CompilerMessage[] arg2 : 编译完成后产生的编译消息数组,包括编译警告和错误信息
    CompilationPipeline.assemblyCompilationFinished += CompilationPipeline_assemblyCompilationFinished;
    
    // CompilationPipeline.compilationFinished
    // 命名空间:UnityEditor.Compilation;
    // 主要作用:当所有程序集编译结束会主动调用该回调函数
    // 参数
    // object obj: ActiveBuildStatus 活动生成状态对象
    CompilationPipeline.compilationFinished += CompilationPipeline_compilationFinished;
}

private void CompilationPipeline_compilationFinished(object obj)
{
    Debug.Log("所有程序集编译结束");
}

private void CompilationPipeline_assemblyCompilationFinished(string arg1, CompilerMessage[] arg2)
{
    Debug.Log("程序集名:" + arg1);  
}

private void OnDestroy()
{
    CompilationPipeline.assemblyCompilationFinished -= CompilationPipeline_assemblyCompilationFinished;
    CompilationPipeline.compilationFinished -= CompilationPipeline_compilationFinished;
}


更多内容

官方文档:CompilationPipeline


47.2 知识点代码

Lesson47_CompilationPipeline

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

public class Lesson47_CompilationPipeline : MonoBehaviour
{
    void Start()
    {
        #region 知识点一 CompilationPipeline公共类是用来做什么的

        //它是 Unity 编辑器中的一个公共类,用于处理代码编译相关的操作和事件的
        //对于我们来说,我们最常用的是利用它得知代码是否编译结束
        //比如动态生成脚本时,我们需要在编译结束后才能使用新的脚本 

        #endregion

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

        #endregion

        #region 知识点三 常用内容 

        //1.CompilationPipeline.assemblyCompilationFinished
        //  命名空间:UnityEditor.Compilation;
        //  主要作用:当一个程序集编译结束会主动调用该回调函数
        //  传入的两个参数分别是
        //  string arg1 : 编译完成的程序集名
        //  CompilerMessage[] arg2 : 编译完成后产生的编译消息数组,包括编译警告和错误信息

        //2.CompilationPipeline.compilationFinished
        //  命名空间:UnityEditor.Compilation;
        //  主要作用:当所有程序集编译结束会主动调用该回调函数
        //  参数
        //  object obj: ActiveBuildStatus 活动生成状态对象

        #endregion

        #region 知识点四 更多内容

        // 官方文档:https://docs.unity3d.com/ScriptReference/Compilation.CompilationPipeline.html

        #endregion
    }
}

MyCompilationPipelineLearnWindow

using UnityEditor;
using UnityEditor.Compilation;
using UnityEngine;

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

    private void OnEnable()
    {
        //1.CompilationPipeline.assemblyCompilationFinished
        //  命名空间:UnityEditor.Compilation;
        //  主要作用:当一个程序集编译结束会主动调用该回调函数
        //  传入的两个参数分别是
        //  string arg1 : 编译完成的程序集名
        //  CompilerMessage[] arg2 : 编译完成后产生的编译消息数组,包括编译警告和错误信息
        CompilationPipeline.assemblyCompilationFinished += CompilationPipeline_assemblyCompilationFinished;
        
        //2.CompilationPipeline.compilationFinished
        //  命名空间:UnityEditor.Compilation;
        //  主要作用:当所有程序集编译结束会主动调用该回调函数
        //  参数
        //  object obj: ActiveBuildStatus 活动生成状态对象
        CompilationPipeline.compilationFinished += CompilationPipeline_compilationFinished;
    }

    private void CompilationPipeline_compilationFinished(object obj)
    {
        Debug.Log("所有程序集编译结束");
    }

    private void CompilationPipeline_assemblyCompilationFinished(string arg1, CompilerMessage[] arg2)
    {
        Debug.Log("程序集名:" + arg1);  
    }

    private void OnDestroy()
    {
        CompilationPipeline.assemblyCompilationFinished -= CompilationPipeline_assemblyCompilationFinished;
        CompilationPipeline.compilationFinished -= CompilationPipeline_compilationFinished;
    }
}


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

×

喜欢就点赞,疼爱就打赏