常见问题一览

提示

如果遇到无法解决的问题欢迎联系作者

热更工程下载下来就报错

提示

原因

热更工程默认用到了.net framework 4.7.1的功能,可能是用户的电脑上默认用的比这个版本低,导致报错

解决方案

切换到.net framework 4.7.1 及以上即可

WebGL无法加载资源

提示

原因

WebGL只可以单线程,而同步加载资源会用到多线程,所以会无法加载资源

解决方案

用异步加载资源的接口

热更工程无法打开

提示

原因

JEngine是用Mac开发的,Win下用VS打开可能会出现这个问题

解决方案

百度/谷歌搜索以下关键词:

  • Windows 打开Mac的C#项目
  • mac windows sln csproj不兼容
  • visual studio 无法打开sln 文件

或者可以创建个C#命令行工程,然后覆盖替换sln和csprj文件,然后记得配置输出路径,参考这里

生成热更工程DLL跳过

提示

内容提供者:清行

原因

JEngine是用Mac开发的,Win下编译DLL有可能需要重新配置

解决方法

方法一:VS打开热更工程后找到配置管理器,指定平台后记得勾上生成

方法二:删除Assets/HotUpdateResources/Main/Dlls/Hidden~文件夹,然后再进一下Unity,会自动重新生成文件夹,然后再生成解决

生成热更工程后游戏没热更

提示

原因

可能是开了真机模式没打新ab,可能开了离线模式没把新ab复制到Streaming Assets,可能DLL没生成成功

解决方案

  1. 确保DLL生成路径在UnityProject/Assets/HotUpdateResources/Main/Dlls/Hidden~
  2. 确保热更工程生成DLL后Unity控制台有输出Clean xxx in xxx ms

如何调试热更工程(或ILRuntime调试器无效)

提示

原因

VS2019开始,或ILRuntime2.0开始,就可以用新版调试器了,旧版的容易无效

解决方案

直接在Visual Studio (Windows), VS Code (Windows + MacOS), Rider (Windows + MacOS) 插件市场搜索ILRuntime即可,然后安装对应的调试插件,接着运行游戏,进入热更场景后,回到IDE,然后附加到ILRuntime调试器插件即可

编辑器下调试发现GC特别高

提示

原因

调试热更代码时,编辑器下的GC一直都会很高,这是正常的

解决方案

有很多种办法降低GC:

  • 做CLR绑定(SHIFT B)
  • 添加DISABLE_ILRUNTIME_DEBUG宏(注意,添加这个后热更工程的日志看不到行号)
  • 尝试优化自己的代码

热更场景材质/Shader丢失

提示

原因

Unity把Shader给去掉了

解决方案

Project Setting -> Graphics 把自己的材质的Shader,或指定的Shader拖进Always Include列表就好

如果还是紫色,那就真机运行看看,这种情况普遍是AB包的平台和运行平台不匹配导致的(比如编辑器下跑Android的AB包,可能会出现Shader不兼容而导致材质变紫)

参考YooAsset文档,看看热更资源配置的地方是不是配置的有问题

热更场景光照贴图丢失

提示

原因

Unity把光照贴图用到的Shader变体给裁了

解决方案

Project Setting -> Graphics -> Shader Stripping -> Lightmap Modes

选择Custom,全打钩,打ab,出包,解决。

OJkfdH.png

Cannot find XXX for: YYY

提示

原因

ILRuntime需要对委托、匿名函数等生成代码

注意,如果是Cannot find method,那就是被裁减了,要做CLR绑定(菜单栏,JEngine/ILRuntime/CLR Bind

解决方案

  • 如果是需要生成Adapter,代表用到了跨域继承,请参考ILRuntime跨域继承文档,搭配JEngine提供的ILRuntime跨域继承适配器生成器去生成适配器

  • 如果是需要生成其他的东西,在报错内会有个Please Add Following Code,复制里面的内容,黏贴到对应文件即可

    guide5

    例如这里是Cannot find Delegate Adapter,那么只需要复制下面的代码,找到Scripts/Helpers/RegisterDelegateAdapterHelper.cs,将代码黏贴进去就好

    Helpers目录下每个文件里都有注释和例子,看看自己的报错内的代码和哪个文件给的例子一样,注册进去就好

    有的时候自动生成的代码,需要手动修改

生成的适配器有报错

提示

原因

如果继承了MonoBehaviour或其他Unity类型,生成的适配器可能会出现重复定义的方法

解决方案

手动删除重复定义的方法即可(如同方法生成了2次,那么删除任意一个即可,需要保留一份)

热更工程没办法使用ScriptableObject

提示

原因

ScriptableObject需要在主工程定义,里面的字段无法热更,只能热更生成的数据配置(.asset文件)

解决方案

在主工程定义ScriptableObject,或在热更工程用其他的代替

热更工程没办法继承IPointerXXXX

提示

原因

首先,跨域继承需要适配器,参考ILRuntime文档,其次,跨域不支持多继承,即不能同时在热更工程继承MonoBehaviourIPointerXXX等接口

解决方案

在主工程定义个类,继承这些需要继承的东西,然后用框架的ILRuntime跨域继承适配器生成器,生成该类的适配器,然后在热更工程继承该类

热更工程没办法使用编辑器代码或使用了不生效

提示

原因

热更工程是运行时环境,没必要使用,使用了也没效果

解决方案

热更工程去掉编辑器代码

热更工程没办法使用主工程Plugins内的代码

提示

原因

没在热更工程引用对应代码

解决方案

热更工程引用UnityProject/Library/ScriptAssemblies/Assembly-CSharp-Firstpass.dll

热更工程没办法使用主工程内的代码

提示

原因

没在热更工程引用对应代码

解决方案

热更工程引用UnityProject/Library/ScriptAssemblies/Assembly-CSharp.dll

热更工程没办法使用主工程Asmdef内的代码

提示

原因

没在热更工程引用对应代码

解决方案

热更工程引用UnityProject/Library/ScriptAssemblies/Asmdef的名字.dll

热更工程部分Unity类型不存在

提示

原因

因为Unity2018后对引擎代码进行了拆分,把不同功能拆分到了不同模块的DLL内,如AnimatiorInput等类型都被拆分出去了,在热更工程内如果没引用对应的模块DLL,则没办法使用

解决方案

  1. 用IDE打开主工程任意脚本

  2. 写个你要用的类,例如写个public Animator a;,然后按下F12,或按下Command(mac),然后左键点击你要用的类(这里的例子就是点刚刚写的Animator

  3. 接着会反编译出来个程序集路径

    BIwX9K.png

  4. 热更工程引用该路径的DLL即可

.Net Framework4.7.1 安装不上

提示

内容提供者:清行

原因

不同电脑有不同的.net framework版本,需要在VS内配置对应版本

解决方案

右键 -> 解决方案 -> 属性 -> 应用程序 : 目标框架 选择对应的版本,需要4.x版本

DOTween无法使用

提示

内容提供者:L-fone

原因

需要以正确的姿势去使用

解决方案

1、导入DoTween

BINzo6.png

2、拷贝Dll文件到HotFix的Dlls目录下

BIwh1U.pngBIwonJ.pngBIwLh6.pngBIwX9K.pngBIwj1O.pngBIwvcD.png

3、引入dll文件到HotFix工程中

BIwTB9.pngBIwqtx.pngBI0SnH.pngBIwxje.pngBI0pBd.png

4、使用DoTween

BI09HA.pngBI0PAI.png

如果还有其他特殊情况,可以在JEngine群里求助,也可以联系QQ:275757115(L-Fone)