HotReload Unity C# script without exit play mode and keep the running context unchanged
HotReload Unity C# script without exit play mode and keep the running context unchanged
本仓库可以实现运行中无感重载C#代码
Unity开发者经常需要在Editor运行起游戏后调试代码,并临时修改代码测试效果,但Unity自身的运行时重新编译C#代码并重载脚本会造成逻辑中断,因此并不可用。
本仓库解决了这个问题,可以实时修改代码并无缝使用新代码的逻辑继续运行,并保持内存中的数据和线程上下文均不改变, 而且可以在源文件原地下断点。
Assets/HotReload 目录到您的工程Tools/HotReload/是否自动重载, 建议手动重载,避免代码写一半就自动编译的情况Play按钮启动游戏,测试中发现逻辑错误,假设此场景不容易重现,您并不想停止play修改代码后再重新运行【Tools/HotReload/立即重载 (Play时有效) #R】 或按 Shift+R, 片刻后若控制台出现 热重载完成 提示则表示已成功重载测试用例文件为
Assets/HotReload/TestCase/Scripts/TestDllA/TestDllA_Main.cs
Assets/HotReload/TestCase/Scenes/HotReloadTestScene.unity 并点击Play运行游戏Test 按钮,观察控制台输出TestDll_Main.cs 顶部的宏定义 #define APPLY_PATCH【Tools/HotReload/立即重载 (Play时有效) #R】 或按 Shift+R, 若为自动重载则跳过此条Test 按钮,对比控制台的输出差异▶ 执行效果
BeforePatch
AfterPatch0
AfterPatch1
一般用户可忽略此段
HotReload/Editor/AssemblyPatcher~/Source/AssemblyPatcher.slnHotReloadExecutor.cs 文件头部 #define PATCHER_DEBUG 宏的注释临时文件目录
函数重定向
已存在类型的静态构造函数
新类型的静态构造函数
No open issues yet, or sync has not completed.