2

我正在开发一个项目,该项目使用 Unity WebGL 以 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):不支持对 IL2CPP:AppDomain::LoadAssemblyRaw 的内部调用-“这个 icall 不是由 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。

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

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

(从answers.unity3d交叉发布)

4

1 回答 1

4

不,没有办法通过反射来解决这个限制。

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

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

于 2015-06-01T13:23:11.340 回答