focus-creative-games / hybridclr

HybridCLR是一个特性完整、零成本、高性能、低内存的Unity全平台原生c#热更新解决方案。 HybridCLR is a fully featured, zero-cost, high-performance, low-memory solution for Unity's all-platform native c# hotupdate.
https://code-philosophy.com/
MIT License
6.6k stars 670 forks source link

WebGL支持的Unity版本 #126

Closed labbbirder closed 8 months ago

labbbirder commented 8 months ago

请问WebGL目前支持哪些版本?之前用2021某个版本没有问题。现在项目因为一些原因必须使用Unity2022.3.10+

现在HybridCLR使用5.1.0,Unity换了2022.3.11和2022.3.14后都出现以下问题:

使用Assembly.Load正常返回了结果,但是之后从AssetBundle中加载带热更MonoBehaviour的Prefab时,出现script missing警告,并且实例化失败

分别尝试了use Global on & off,结果一样。

望告知下WebGL稳定支持的Editor版本

pirunxi commented 8 months ago

我们已经在文档中非常详细地说明了,2019-2022全系列lts版本都是支持webgl的,这部分已经稳定很久,如果有问题,早就有人反馈了。建议根据文档自查。

实在自查不出原因,联系商务,可以付费给你们查一下。如果是我们的bug,会退还费用。

labbbirder commented 8 months ago

HybridCLR确实支持2022.3.x WebGL平台。

问题搞定了,分享一下我的排查步骤,如果有人遇到类似问题,可以节省时间:

  1. 加载ab之前打印AppDomain Assemblies,确定domain中存在热更模块
  2. 逆向webgl.data,确定相关热更模块存在于ScriptingAssemblies.json
  3. 检查出问题的ab中m_Script->m_PathId,比对mono_bundle中的脚本id
  4. 检查第二步中找到的程序集名称、Namespace、类名,看是否正确
  5. 如果是Addressable,则加载热更模块后重载catalog
  6. 检查相关类名、程序集名、文件名一致性
Bian-Sh commented 8 months ago

HybridCLR确实支持2022.3.x WebGL平台。

问题搞定了,分享一下我的排查步骤,如果有人遇到类似问题,可以节省时间:

  1. 加载ab之前打印AppDomain Assemblies,确定domain中存在热更模块
  2. 逆向webgl.data,确定相关热更模块存在于ScriptingAssemblies.json
  3. 检查出问题的ab中m_Script->m_PathId,比对mono_bundle中的脚本id
  4. 检查第二步中找到的程序集名称、Namespace、类名,看是否正确
  5. 如果是Addressable,则加载热更模块后重载catalog
  6. 检查相关类名、程序集名、文件名一致性

总而言之,按我的理解就是要确保不要使用错误的(缓存的)ab数据,需要重载 catalog,需要清空浏览器缓存,不能使用带 cache 功能的api加载 ab。