当前位置: 首页 > news >正文

Unity 编辑器热更C# FastScriptReload

工具源码:https://github.com/handzlikchris/FastScriptReload


介绍

  • 用于运行时修改C#后能快速重新编译C#并生效,避免每次改C#,unity全部代码重新编译,耗时旧且需要重启游戏。

使用

  • 需要手动调整AssetPipeline自动刷新模式,即改成运行时不要自动刷新资源,同时意味着:

    • 运行时改shader代码不会及时生效,如果主要调试shader,还是要开运行时刷新。

    • 运行时window下改工程资源,unity不会刷新,比如外部新增一张图,unity不会刷新显示。

在这里插入图片描述


原理

  1. FastScriptReloadManagerEditorApplication.update每帧检查所有配置的*.cs文件

    1. System.IO.FileSystemWatcher.Changed 提供文件变化时事件
  2. 对变化的C#文件重新创建C#文件
    在这里插入图片描述

    1. 对原来C#文件语法分析,对新增变量和方法另外封装,对修改的变量不用另外处理。类似将新增的变量存到他一个临时字典里,访问就到他的字典里取。生成.SourceCodeCombined.cs文件
      在这里插入图片描述
    • 生成.rsp文件,包含编译需要的一些信息。
      在这里插入图片描述

    • 使用.net命令和csc.dll工具编译C#代码为DLL文件。

  3. 安卓环境的话,这里会把dll转成字节流发给手机,手机收到后下面流程一致。

  4. 使用System.Reflection.Assembly.LoadFrom加载DLL文件。

  5. AssemblyChangesLoader.DynamicallyUpdateMethodsForCreatedAssembly 对所有已存在的C#方法,重定向到新的C#方法:Memory.DetourMethod,即把旧的函数指针指向新的函数。


安卓环境测试

  • 原理和上面一致,只是多了层网络收发,即把DLL的字节流发给手机,手机收到消息后加载程序集即可。

相关文章:

  • 安卓基础(Adapter)
  • JVM 底层探秘:对象创建的详细流程、内存分配机制解析以及线程安全保障策略
  • React生产环境下使用mock.js
  • VueRouter 实例
  • 单、双 链 表
  • MIMO信号检测ZF算法和MMSE算法
  • 深度求索—DeepSeek API的简单调用(Java)
  • 简单的异步图片上传
  • 游戏引擎学习第104天
  • ABB能源自动化选用宏集Cogent DataHub避免DCOM问题,实现高效、安全的数据传输
  • cuML机器学习GPU库
  • vue3的响应式的理解,与普通对象的区别
  • ROS基本功能
  • 【吾爱出品】视频素材资源搜索、解析、下载助手
  • 深入解析操作系统控制台:阿里云Alibaba Cloud Linux(Alinux)的运维利器
  • 自动化运维之ansible快速入门
  • Ubuntu24.04更新国内源
  • Facebook精准获客:外贸企业如何通过社群营销将产品推广到海外
  • 【2025最新版】软件测试面试题总结(150道题含答案解析)
  • C++ 后台开发简历优化指南和如何利用DeepSeek优化简历
  • 马上评|训斥打骂女儿致死,无暴力应是“管教”底线
  • 中国物流集团等10家央企11名领导人员职务任免
  • 女孩患异食癖爱吃头发,一年后腹痛入院体内惊现“头发巨石”
  • 中国科学院院士、我国航天液体火箭技术专家朱森元逝世
  • 【社论】公平有序竞争,外卖行业才能多赢
  • 当代科技拟召开债券持有人会议 ,对“H20科技2”进行四展