将脚本添加到HTML

时间:2015-06-01 08:53:50

标签: javascript unity3d assetbundle

我正在开发一个项目,使用Unity WebGL在3D中显示不同的机器/部件/ ..这些部件或机器由用户选择然后加载到场景中(现在只有一个单个场景,但我们可能也想动态加载场景。)

由于我们想要创建不同资产包的大量选择,每个资产包包含一个或多个部分,因此我们可以按需下载这些资产包。

我已成功完成此操作,方法是将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 - &# 34; il2cpp不支持此icall。"        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);(我从示例中获得),所以我认为Reflection类不是(但是?)完全支持WebGL。我似乎无法找到相关文档。

有没有办法使用Reflection来做到这一点?至多我希望有一些不同的代码可以解决这个问题,最糟糕的是我们必须在Javascript中为WebGL创建脚本并将其添加为不是二进制代码?我在这里有点迷失,所以任何线索都会受到赞赏。

(从answers.unity3d交叉发布)

1 个答案:

答案 0 :(得分:4)

不,这种限制无法用反射来解决。

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

当然,可以在运行时加载JavaScript代码,因此,如您所知,您可能需要走这条路。