在 HTML 中将脚本添加到 assetbundle

Add script to assetbundle in HTML

我正在做一个项目,使用 Unity WebGL 显示不同的 machines/parts/.. 在 3D 中,这些零件或机器由用户选择,然后加载到场景中(目前有只是一个场景,但我们可能还想动态加载场景。

由于选择较多,我们希望创建不同的资产包,每个包含 1 个或多个部分,因此我们可以按需下载这些。

我通过将 URL 传递给 LoadFromCacheOrDownload 并从 www 对象中提取 gameObject 成功地完成了这项工作。

现在我们还想在资产中包含脚本以创建动画和用户交互。我遵循了这里给出的解释:docs.unity3d link这在 WebPlayer 中完美运行。但是最终要求是 WebGL,为 WebGL 构建的相同代码会出现以下错误:

NotSupportedException: /Users/builduser/buildslave/unity/build/Tools/il2cpp/il2cpp/libil2cpp/icalls/mscorlib/System/AppDomain.cpp(184) : Unsupported internal call for IL2CPP:AppDomain::LoadAssemblyRaw - "This icall is not supported by il2cpp." System.AppDomain.LoadAssemblyRaw (System.Byte[] rawAssembly, System.Byte[] rawSymbolStore, System.Security.Policy.Evidence securityEvidence, Boolean refonly) System.AppDomain.Load (System.Byte[] rawAssembly, System.Byte[] rawSymbolStore, System.Security.Policy.Evidence securityEvidence, Boolean refonly) System.AppDomain.Load (System.Byte[] rawAssembly, System.Byte[] rawSymbolStore, System.Security.Policy.Evidence securityEvidence) System.AppDomain.Load (System.Byte[] rawAssembly) System.Reflection.Assembly.Load (System.Byte[] rawAssembly) API+c__Iterator0.MoveNext ()

它似乎源于调用 System.Reflection.Assembly.Load(txt.bytes);(我从示例中得到),所以我想反射 class 还没有(还?)完全支持 WebGL。我似乎找不到任何关于此的文档。

有没有办法为此使用反射?充其量我希望有一些不同的代码可以解决这个问题,最坏的情况是我们必须在 Javascript 中为 WebGL 创建脚本并按原样添加它们而不是二进制文件?我在这里有点迷路,所以感谢任何线索。

(来自 answers.unity3d 的交叉发布)

不,无法通过反射绕过此限制。

在这种情况下,Unity 中网络播放器和 WebGL 构建目标之间的主要区别在于 WebGL 使用 AOT(提前)编译,而网络播放器使用 JIT(即时)编译。使用 AOT 编译,不可能在 运行 时加载编译时不存在的程序集。

当然,可以在 运行 时加载 JavaScript 代码,所以按照您的建议,您可能需要走这条路。