在上一篇笔记unity ECS 学习笔记 一 子场景以及发布2 - 简书 (jianshu.com)的基础上接入华佗热更框架介绍 | HybridCLR (code-philosophy.com).
默认情况下ECS的代码是不能直接走热更的,这里需要稍微调整下:
-
加上UNITY_DISABLE_AUTOMATIC_SYSTEM_BOOTSTRAP_RUNTIME_WORLD宏,阻止ECS自动初始化WORLD;
UNITY_DISABLE_AUTOMATIC_SYSTEM_BOOTSTRAP_RUNTIME_WORLD -
加载完成热更新DLL后执行以下代码,初始化Wrold;
TypeManager.Shutdown();
TypeManager.Initialize();
DefaultWorldInitialization.Initialize("Default World", false);
- 切换到有Entity的场景,类似代码,Test02的内容在上一篇笔记
SceneManager.LoadScene("Test02", LoadSceneMode.Single);
通过以上方式和流程可以实现热更“组件”(IComponentData)和class类型的“系统”(SystemBase),但是基于(ISystem)的值类型“系统”由于ILPostProcess会给dll注入额外代码的原因无法热更(加载时会报错),后面可以研究下是否可以在编译热更dll时也调用下ECS框架的工具给热更dll也注入一下代码;
网友评论