Unity编辑器重新编译代码

最近碰到Unity编辑器偶尔抽风,明明代码都正常的,编译却有个空报错,导致策划/美术有时候需要重启Unity,有时候需要关掉unity+删除Library/AssemblyScript目录再开unity才正常(程序可以任意代码加个注释触发Unity编译之后也正常)。于是搞了个编辑器上重新编译脚本的功能。

自Unity 2019.3 引入了公共编辑器 API 来强制重新编译脚本:通过钩挂到程序集编译 start/finished 事件对其进行了测试,该方法确实重新编译了项目中的所有脚本。UnityEditor.Compilation.CompilationPipeline.RequestScriptCompilation


对于 Unity 2017.1 到 Unity 2019.2 的 Unity 版本,可以通过反射进行调用。 是 Unity 2019.3 从 method 内部调用的方法(请参阅参考)。遗憾的是,对于早于 2017.1 的 Unity 版本,我不确定是否存在,因为 Unity C# 参考没有该 Unity 版本的源代码。UnityEditor.Scripting.ScriptCompilation.EditorCompilationInterface.DirtyAllScripts``DirtyAllScripts``RequestScriptCompilation``DirtyAllScripts


简单的编辑器窗口,用于在单击按钮时强制重新编译脚本(使用 Unity 2019.3.0f6、Unity 2022.3.54f1 和 Unity 2017.1.1f1 测试):

复制代码
using UnityEditor;
#if UNITY_2019_3_OR_NEWER
using UnityEditor.Compilation;
#elif UNITY_2017_1_OR_NEWER
using System.Reflection;
#endif
using UnityEngine;

namespace PumpEditor
{
    public class CompilationWindow : EditorWindow
    {
        [MenuItem("Window/Pump Editor/Compilation")]
        private static void ShowWindow()
        {
            var window = EditorWindow.GetWindow<CompilationWindow>();
            window.titleContent = new GUIContent("Compilation");
            window.Show();
        }

        private void OnGUI()
        {
            if (GUILayout.Button("Request Script Compilation"))
            {
#if UNITY_2019_3_OR_NEWER
                CompilationPipeline.RequestScriptCompilation();
#elif UNITY_2017_1_OR_NEWER
                var editorAssembly = Assembly.GetAssembly(typeof(Editor));
                var editorCompilationInterfaceType = editorAssembly.GetType("UnityEditor.Scripting.ScriptCompilation.EditorCompilationInterface");
                var dirtyAllScriptsMethod = editorCompilationInterfaceType.GetMethod("DirtyAllScripts", BindingFlags.Static | BindingFlags.Public);
                dirtyAllScriptsMethod.Invoke(editorCompilationInterfaceType, null);
#endif
            }
        }
    }
}

参考: Force Unity to recompile scripts - Questions & Answers - Unity Discussions

相关推荐
叶帆13 小时前
【YFIOs】用C#开发硬件之设备上云
开发语言·unity·c#
久数君14 小时前
AI三维建模工具“造形家”:地理场景三维化的高效解决方案
unity·glb·ai算法·ai三维建模工具·地图框选·造形家·城市建筑模型
会思考的猴子1 天前
Unity VFX 属性 Postion 和 TargetPostion
unity
心前阳光1 天前
Unity资源导入之自动化资源导入
unity·自动化·游戏引擎
心前阳光1 天前
Unity之2021.3.45f2c1发布安卓程序遇到的问题
android·unity·游戏引擎
纪纯1 天前
PicoVR Unity Integration SDK 3.4 常用交互API
unity·游戏引擎·vr·pico
龙智DevSecOps解决方案1 天前
3A 游戏优化技术栈:如何打通引擎级分析工具与 DevOps 持续集成管线?
unity·性能优化·游戏开发·技术美术·perforce·unrealengine
葛兰岱尔1 天前
从 SolidWorks 到 Three.js,从 Inventor 到 Unity——制造业CAD模型“几何-语义一体化“转换,不再是天方夜谭!
开发语言·javascript·unity
玉夏2 天前
【Shader基础】UV 与纹理采样 Part1
unity·着色器·uv
zdr尽职尽责2 天前
Unity录像功能
学习·ui·unity·游戏引擎