FMTP WebGL Unity 构建。在 Heirarchy 中激活 FMNetworkManager 时出现 Emscripten 错误

Posted

技术标签:

【中文标题】FMTP WebGL Unity 构建。在 Heirarchy 中激活 FMNetworkManager 时出现 Emscripten 错误【英文标题】:FMETP WebGL Unity Build. Emscripten error when FMNetworkManager activated in Heirarchy 【发布时间】:2021-08-18 10:25:14 【问题描述】:

所以我一直在从事一个项目,该项目将视频源从 Oculus 任务流式传输到在远程服务器 (Digital Ocean) 上运行的 WebGL 构建

我目前有两个问题...

1.当我构建到 WebGl 并在线推送更新时。它只会在我禁用 FMNetworkManager 时运行。

如果我在本地运行应用程序,它没有任何问题,并且我已经能够将视频从 Quest 耳机发送到接收器应用程序。

部分回复如下:

An error occurred running the Unity content on this page. See your browser javascript console for more info. The error was:
uncaught exception: abort("To use dlopen, you need to use Emscripten's linking support, see https://github.com/kripken/emscripten/wiki/Linking") at jsStackTrace (Viewer.wasm.framework.unityweb:8:15620)
stackTrace (Viewer.wasm.framework.unityweb:8:15791)
onAbort@https://curtin-cooking-control-nr9un.ondigitalocean.app/Build/UnityLoader.js:4:11199
abort (Viewer.wasm.framework.unityweb:8:500966)
_dlopen (Viewer.wasm.framework.unityweb:8:181966)
@blob:https://***/de128118-3923-4c88-8092-7a9945d90746 line 8 > WebAssembly.instantiate:wasm-function[60882]:0x1413efb (blob:***/de128118-3923-4c88-8092-7a9945d90746 line 8 > WebAssembly.instantiate:wasm-function[62313]:0x1453761)
...
...
...WebAssembly.instantiate:wasm-function[63454]:0x148b9a9)
UnityModule [UnityModule/Module.dynCall_v] (Viewer.wasm.framework.unityweb:8:484391)
browserIterationFunc (Viewer.wasm.framework.unityweb:8:186188)
runIter (Viewer.wasm.framework.unityweb:8:189261)
Browser_mainLoop_runner (Viewer.wasm.framework.unityweb:8:187723)

所以我知道有一个与 (wasm) Emscripten 相关的问题,并在互联网上搜寻了无济于事的解决方案。

    虽然我已经提到我有视频从一台设备流式传输到另一台设备。我只在本地运行过这个功能。使用同样在 Digital Ocean 上运行的 node.js 服务器。这似乎正在运行,看到服务器在运行时注册了两个设备。在每个应用程序中,虽然我通过查看 Last Sent Time 更新看到了数据传输,但 FM Web Socket Network_debug 也将 [connected: True] 推送到文本 ui。 FM 客户端(脚本)中的 IsConnected 或 Found Server 复选框无法检查为已连接。

FMNetworkManager

我绝不是统一编程、webgl 和网络服务器设置方面的专家,因此我对实现此功能的理解让我看到了许多不相关的解决方案,同时尝试对某些解决方案与其他解决方案建议的元素进行少量更改让我茫然地看着太空,想知道我什至在哪里实现它。

任何指导都会很棒,一步一步的解决方案会很棒。

[编辑 - 详细错误]

UnityLoader.js:1150 wasm streaming compile failed: TypeError: Could not download wasm module
printErr    @   UnityLoader.js:1150
Promise.catch (async)       
doNativeWasm    @   524174d7-d893-4b91-8…0-aa564a23702d:1176
(anonymous) @   524174d7-d893-4b91-8…0-aa564a23702d:1246
(anonymous) @   524174d7-d893-4b91-8…-aa564a23702d:20166
UnityLoader.loadCode.Module @   UnityLoader.js:889
script.onload   @   UnityLoader.js:854
load (async)        
loadCode    @   UnityLoader.js:849
processWasmFrameworkJob @   UnityLoader.js:885
job.callback    @   UnityLoader.js:475
setTimeout (async)      
job.complete    @   UnityLoader.js:490
(anonymous) @   UnityLoader.js:951
decompressor.worker.onmessage   @   UnityLoader.js:89

提前致谢

亚伦

【问题讨论】:

【参考方案1】:

您将 FMNetworkUDP 和 FMWebsocket 组合在一起使用错误。 对于 WebGL 构建,UDP 是不允许的,这会导致如预期的错误。

您的 websocket ip 是可访问的,因为它可以通过您的 IP 访问。 但请尽量不要在***之类的公共论坛上公开您的服务器IP,以后每个人都可以随时连接到您的服务器。

你应该完全移除 FMNetworkManager,同时只保留 FMWebsocket 组件用于 webgl 流。

您可以使用 webgl 构建的 Websocket 流示例场景对其进行测试。

【讨论】:

以上是关于FMTP WebGL Unity 构建。在 Heirarchy 中激活 FMNetworkManager 时出现 Emscripten 错误的主要内容,如果未能解决你的问题,请参考以下文章

我尝试在 unity-webGL 中构建我的游戏,但出现错误

尝试将 Agora IO 与 Unity WebGL 集成。构建演示场景时出错

无法在 Unity WebGL 构建的全屏画布上覆盖 div

更新到 Unity 2019.3 后无法编译 Unity WebGL

解析 Unity/WebGL 帖子经常失败

Unity5中WebGL平台封装的一些技巧