基于unity2017\2020版本

using System;
using System.Linq;
using System.Reflection;
using UnityEditor;
using UnityEngine; [InitializeOnLoad]
public static class DisableAutoCompile
{
private const string _KEY = "DisableAutoCompile";
private static string s_RecoverValue = null; static DisableAutoCompile()
{
UnityEditor.Compilation.CompilationPipeline.assemblyCompilationStarted += CompilationPipeline_assemblyCompilationStarted;
#if UNITY_2018_1_OR_NEWER
UnityEditor.Compilation.CompilationPipeline.compilationFinished += CompilationPipeline_compilationFinished;
#endif
} private static void CompilationPipeline_assemblyCompilationStarted(string obj)
{
CheckAvoidCompile();
} private static void CompilationPipeline_compilationFinished(object obj)
{
if (s_RecoverValue != null)
{
EditorPrefs.SetString(_KEY, s_RecoverValue);
s_RecoverValue = null;
}
} private static void CheckAvoidCompile()
{
if (EditorPrefs.GetString(_KEY, "") == "true")
{
Assembly[] assemblies = AppDomain.CurrentDomain.GetAssemblies();
#if UNITY_2018_1_OR_NEWER
Assembly coreModule = assemblies.FirstOrDefault(x => x.FullName.StartsWith("UnityEditor.CoreModule,"));
#else
Assembly coreModule = assemblies.FirstOrDefault(x => x.FullName.StartsWith("UnityEditor,"));
#endif
Type t1 = coreModule.GetType("UnityEditor.Scripting.ScriptCompilation.EditorCompilationInterface");
object editorCompilation = t1.GetProperty("Instance", BindingFlags.Public | BindingFlags.Static).GetValue(null, null);
Type t2 = coreModule.GetType("UnityEditor.Scripting.ScriptCompilation.EditorCompilation");
MethodInfo StopAllCompilation = t2.GetMethod("StopAllCompilation", BindingFlags.Public | BindingFlags.Instance);
StopAllCompilation.Invoke(editorCompilation, null);
Debug.Log("forbid compile");
}
} [MenuItem("C#编译/允许自动编译", true)]
public static bool CheckAllowCompile()
{
return EditorPrefs.GetString(_KEY, "") == "true";
} [MenuItem("C#编译/允许自动编译")]
public static bool AllowCompile()
{
EditorPrefs.SetString(_KEY, "");
} [MenuItem("C#编译/禁止自动编译", true)]
public static bool CheckForbidCompile()
{
return EditorPrefs.GetString(_KEY, "") != "true";
} [MenuItem("C#编译/禁止自动编译", true)]
public static bool ForbidCompile()
{
EditorPrefs.SetString(_KEY, "true");
} #if UNITY_2018_1_OR_NEWER
[MenuItem("C#编译/现在编译")]
public static bool CompileNow()
{
string oldValue = EditorPrefs.GetString(_KEY, "");
AllowCompile();
s_RecoverValue = oldValue;
UnityEditor.Compilation.CompilationPipeline.RequestScriptCompilation();
}
#else
[MenuItem("C#编译/现在编译(会允许自动编译)")]
public static bool CompileNow()
{
AllowCompile();
Assembly[] assemblies = AppDomain.CurrentDomain.GetAssemblies();
Assembly coreModule = assemblies.FirstOrDefault(x => x.FullName.StartsWith("UnityEditor,"));
Type t1 = coreModule.GetType("UnityEditor.Scripting.ScriptCompilation.EditorCompilationInterface");
object editorCompilation = t1.GetProperty("Instance", BindingFlags.Public | BindingFlags.Static).GetValue(null, null);
Type t2 = coreModule.GetType("UnityEditor.Scripting.ScriptCompilation.EditorCompilation");
MethodInfo DirtyAllScripts = t2.GetMethod("DirtyAllScripts", BindingFlags.Public | BindingFlags.Instance);
DirtyAllScripts.Invoke(editorCompilation, null);
}
#endif
}

Unity禁止C#自动编译的更多相关文章

  1. 使用ant自动编译安卓项目并签名

     准备阶段: 1.下载ant,jdk,android sdk        ant下载地址:ant.apache.org/bindownload.cgi 2. 设置环境变量      ANT_HO ...

  2. Entity Framework 6 Recipes 2nd Edition(13-6)译 -> 自动编译的LINQ查询

    问题 你想为多次用到的查询提高性能,而且你不想添加额外的编码或配置. 解决方案 假设你有如Figure 13-8 所示的模型 Figure 13-8. A model with an Associat ...

  3. [CI] 使用Jenkins自动编译部署web应用

    写在前面 初步接触持续集成自动化过程,本篇主要介绍基于Jenkins实现持续集成的方式,通过案例介绍线上自动编译及部署的配置过程 持续集成 持续集成是一种软件开发实践,即团队开发成员经常集成它们的工作 ...

  4. 【Android】Eclipse自动编译NDK/JNI的三种方法

    [Android]Eclipse自动编译NDK/JNI的三种方法 SkySeraph Sep. 18th  2014 Email:skyseraph00@163.com 更多精彩请直接访问SkySer ...

  5. gulp之压缩合并MD5清空替换加前缀以及自动编译自动刷新浏览器大全

    gulp是基于流的前端构件化工具.目前比较火的前端构建化工具还是挺多的,grunt gulp fis3等等. 这个鬼东西有什么用?请参考https://www.zhihu.com/question/3 ...

  6. Eclipse不自动编译java文件的终极解决方案

    最近我的eclipse经常犯傻,项目中总是有很多,启动项目也是没有启动类.查了下项目中生成的class文件,我靠竟然没有,或者还是以前的.原来是eclipse犯傻了,它没帮我自动编译java文件.一般 ...

  7. Eclipse下无法自动编译,或者WEB-INF/classes目录下没文件,编译失败的解决办法(转载)

    文章来源:http://www.cnblogs.com/xfiver/archive/2010/07/07/1772764.html 1.  IOException parsing XML docum ...

  8. TypeScript 自动编译

    安装Typescript npm install -g typescript 手动编译 tsc greeter.ts 自动编译 tsc -w greeter.ts

  9. Eclipse不能自动编译 java文件

      在网上的解决方法 方法参考如下: (1) Window-->Preferences-->General-->Workspace  有个"Build automatica ...

  10. WebStorm 9 自动编译 SCSS 产出 CSS 和 source maps

    1.  上一节我们学习了Windows下搭建Ruby开发环境,也为这一节的学习做了铺垫.因为本节需要在Ruby环境下安装SASS.详细请见:http://www.cnblogs.com/wind128 ...

随机推荐

  1. locust与jmeter测试过程及结果对比

    JMeter和Locust都是强大的性能测试工具,各自拥有自己的优势和专注领域.JMeter提供了全面的功能和基于GUI的界面,适用于复杂的场景和非技术人员.相比之下,Locust采用了以代码为中心的 ...

  2. Git:GitLab使用AD账户报错——remote: HTTP Basic: Access denied

    错误原因 当第一次使用AD账户进入GitLab时,需要进行密码重置,之后重新登录并进行克隆操作即可.

  3. 采用PCA算法&KMeans算法来实现用户对物品类别的喜好细分(菜篮子分析)(附带数据集下载)

    实现该项目的流程如下 """ 项目:用户对物品类别的喜好细分(菜篮子分析) 主算法:PCA降维算法 KMeans算法 总思路 1.导包 2.获取数据 3.数据处理 5.特 ...

  4. C#.NET 国密SM2 加密解密 与JAVA互通 ver:20230805

    C#.NET 国密SM2 加密解密 与JAVA互通 ver:20230805 .NET 环境:.NET6 控制台程序(.net core). JAVA 环境:JAVA8,带maven 的JAVA控制台 ...

  5. 使用kafka自带脚本进行压力测试

    前言 kafka官方自带压力测试脚本: 消费者压力测试:kafka-consumer-perf-test.sh 生产者压力测试:kafka-producer-perf-test.sh 测试节点: 17 ...

  6. 交换分区swap的创建与管理

    前言 swap分区是linux系统中一块特殊的硬盘空间,当实际内存不够用的时候,系统会按照一定的算法将部分不用的数据放在swap分区中,从而为当前运行的程序腾出足够的内存空间.好处在于避免内存资源不足 ...

  7. 让 GPT-4 来修复 Golang “数据竞争”问题 - 每天5分钟玩转 GPT 编程系列(6)

    目录 1. Golang 中的"数据竞争" 2. GoPool 中的数据竞争问题 3. 让 GPT-4 来修复数据竞争问题 3.1 和 GPT-4 的第一轮沟通 3.2 和 GPT ...

  8. Oracle数据库经纬度坐标查询优化与结果错误原因分析、SQL中WKT超长文本字符串处理

    目录 一.Oracle几何空间数据对象和其他数据库的差异 二.Oracle查询一个经纬度坐标是否在边界内部 2.1 查询条件 2.2 查询结果错误,似乎是仅做了MBR匹配 2.3 错误原因 2.4 解 ...

  9. 在原生APP中集成Unity容器

    随着技术的发展,越来越多的APP期望拥有3D,AR的能力.要达到这个目标可以选择使用原生开发,也可以使用Unity成熟的3D开发技术链,通过嵌入的方式将Unity容器嵌入到APP中.这里介绍的是通过嵌 ...

  10. 《小白WEB安全入门》01. 扫盲篇

    @ 目录 基础知识 什么是WEB 什么是前端 什么是后端 什么是数据库 什么是协议 什么是WEB安全 什么是服务器 什么是IP地址.端口 什么是局域网.广域网.内网.外网 什么是URL 什么是MAC地 ...