停止Unity在运行时脚本修改重新编译的情况
nity3D有一个叫做”live recompile”的功能,即在编辑器处于播放状态时修改脚本代码或替换托管dll等操作时,当场触发重新编译生成项目脚本assembly,并会进行重新加载操作,然而,这个功能很多时候并不能保证重加载后的代码逻辑依然能正常运行,轻则报错,重则卡死。经过博主测试发现,Unity在重加载assembly后,会清空类实例部分成员变量的值(如在Awake中new出的数组对象等),且不负责还原。
使用以下脚本可以让Unity在代码修改时不重新编译,而是显示一个锁,在停止运行时才重新编译
// Copyright Cape Guy Ltd. 2018. http://capeguy.co.uk.
// Provided under the terms of the MIT license -
// http://opensource.org/licenses/MIT. Cape Guy accepts
// no responsibility for any damages, financial or otherwise,
// incurred as a result of using this code. using UnityEditor;
using UnityEngine; /// <summary>
/// Prevents script compilation and reload while in play mode.
/// The editor will show a the spinning reload icon if there are unapplied changes but will not actually
/// apply them until playmode is exited.
/// Note: Script compile errors will not be shown while in play mode.
/// Derived from the instructions here:
/// https://support.unity3d.com/hc/en-us/articles/210452343-How-to-stop-automatic-assembly-compilation-from-script
/// </summary>
[InitializeOnLoad]
public class DisableScripReloadInPlayMode
{
static DisableScripReloadInPlayMode()
{
EditorApplication.playModeStateChanged
+= OnPlayModeStateChanged;
} static void OnPlayModeStateChanged(PlayModeStateChange stateChange)
{
switch (stateChange) {
case (PlayModeStateChange.EnteredPlayMode): {
EditorApplication.LockReloadAssemblies();
Debug.Log ("Assembly Reload locked as entering play mode");
break;
}
case (PlayModeStateChange.ExitingPlayMode): {
Debug.Log ("Assembly Reload unlocked as exiting play mode");
EditorApplication.UnlockReloadAssemblies();
break;
}
}
} }
相关参考:https://answers.unity.com/questions/286571/can-i-disable-live-recompile.html
Unity2018已经可以自行设置

最完美的方案:https://capeguy.dev/2018/06/disabling-assembly-reload-while-in-play-mode/
停止Unity在运行时脚本修改重新编译的情况的更多相关文章
- [C#] 将NLog输出到RichTextBox,并在运行时动态修改日志级别过滤
作者: zyl910 一.缘由 NLog是一个很好用的日志类库.利用它,可以很方便的将日志输出到 调试器.文件 等目标,还支持输出到窗体界面中的RichTextBox等目标. 而且它还支持在运行时修改 ...
- Unity发布WebGL时如何修改默认的载入进度条
Unity发布WebGL版本后,需要去除Unity的Logo,首先关闭Splash Image去除Made with Unity启动画面(在File->Build Settings->Pl ...
- 运行时动态修改webconfig
网站运行时,如果直接手动修改webconfig.xml,会造成线程池重启,对于PV大的网站来说风险是很大的,并且如果有多台服务器,逐台修改也会造成数据不一致. .NET 2.0后可以通过代码修改web ...
- Unity3d运行时动态修改材质
void Start () { const string MainTexVariableName = "_MainTex"; var renders = gameObject.Ge ...
- 运行时修改TimerTask的执行周期
java.util.TimerTask类的执行周期period变量的声明如下: /** * Period in milliseconds for repeating tasks. A positive ...
- Unity Built-In Shader造成的运行时内存暴涨
在某个PC项目中使用了大量的材质球, 并且都使用了自带的Standard Shader, 在编辑器运行的时候, 一切良好, 运行内存只在1G左右, 然而在进行AssetBundle打包之后, EXE运 ...
- Objective-C Runtime 运行时之四:Method Swizzling
理解Method Swizzling是学习runtime机制的一个很好的机会.在此不多做整理,仅翻译由Mattt Thompson发表于nshipster的Method Swizzling一文. Me ...
- Objective-C Runtime 运行时之一:类与对象
Objective-C语言是一门动态语言,它将很多静态语言在编译和链接时期做的事放到了运行时来处理.这种动态语言的优势在于:我们写代码时更具灵活性,如我们可以把消息转发给我们想要的对象,或者随意交换一 ...
- Objective-O Runtime 运行时初体验
Objective-C语言是一门动态语言,它将很多静态语言在编译和链接时期做的事放到了运行时来处理.这种动态语言的优势在于:我们写代码时更具灵活性,如我们可以把消息转发给我们想要的对象,或者随意交换一 ...
- iOS-浅谈runtime运行时机制-runtime简单使用(转)
转自http://www.cnblogs.com/guoxiao/p/3583432.html 由于OC是运行时语言,只有在程序运行时,才会去确定对象的类型,并调用类与对象相应的方法.利用runtim ...
随机推荐
- 基于主成分分析(PCA)的数据降维
一.概述 主成分分析(Principal Component Analysis,PCA)是一种用于数据降维的方法,其核心目标是在尽可能保留原始数据信息的前提下,将高维数据映射到低维空间.该算法基于 ...
- Java 原生异步编程与Spring 异步编程 详解
简介 Java 异步编程是现代高性能应用开发的核心技术之一,它允许程序在执行耗时操作(如网络请求.文件 IO)时不必阻塞主线程,从而提高系统吞吐量和响应性. 异步 vs 同步 同步:任务按顺序执行,后 ...
- 智能点餐助手平台:CodeBuddy模型驱动的技术革新
我正在参加CodeBuddy「首席试玩官」内容创作大赛,本文所使用的 CodeBuddy 免费下载链接:腾讯云代码助手 CodeBuddy - AI 时代的智能编程伙伴 引言 在当代互联网技术高速发展 ...
- RPC实战与核心原理之动态分组
动态分组:超高效实现秒级扩缩容 回顾 在 RPC 里面怎么支持流量回放,应用在引入 RPC 后,所有的请求都会被 RPC 接管,而我们在 RPC 里面引入回放的原因也很简单,就是想通过线上流量来验证改 ...
- 深入浅出了解生成模型-2:VAE模型原理以及代码实战
From: https://www.big-yellow-j.top/posts/2025/05/11/VAE.html 前文已经介绍了GAN的基本原理以及代码操作,本文主要介绍VAE其基本原理以及代 ...
- 【洛谷有题】NOI 笔试题库(非初赛)订正
传送门 第一次做,那个成绩可是一个惨不忍睹-- 我还是想说--我虽然要用Linux,但是不一定要用到指令啊(吧)--编译啥的我可以用Vim|guide啊-- Linux 中为文件改名使用的命令是: m ...
- Flask之视图,会话、模板
一.视图 1.route (1)路由: 将从客户端发送过来的请求分发到指定函数上 (2)语法: @app.route('/rule/') def hello(): return 'Hello Worl ...
- Coze/Dify/FastGPT/N8N :该如何选择Agent平台?
你好,小钗在医疗AI.教育AI.管理AI有丰富的经验 关注公众号,回复1,与我交个朋友吧 书接上文: AI创业如何选择Agent平台,Coze.Dify.腾讯元器?可能都不是 Coze案例,个人知识库 ...
- 【前端AI实践】Lingma:使用工具辅助开发让你停不下来
如果你用过 GitHub Copilot,那你对 AI 编程助手应该不陌生.而 Lingma 是阿里云推出的一款专注于编程场景的智能编码助手. 它深度集成在 VS Code.JetBrains 等主流 ...
- 好消息!数栈FlinkX技术团队将FlinkX开源项目同步推送到Gitee啦!
数栈是云原生-站式数据中台PaaS,我们在github上有一个有趣的开源项目:FlinkX FlinkX是一个基于Flink的批流统一的数据同步工具,既可以采集静态的数据,比如MySQL,HDFS等, ...