更改页面时如何清理和卸载 Unity WebGL canvas
How do I clean up and unload a Unity WebGL canvas when changing page
下载 运行 Unity WebGL
游戏后更改当前页面时,我的 Web 应用程序出现问题。
事实上,我很确定这个游戏是 运行 因为当我的玩家快要死的时候我会不断听到声音。
有没有办法在更改网页时删除所有上下文?这可能是一种内存泄漏吗?
编辑 1:我的 Web 应用程序使用 AngularJS / Material
完成
解决方案很简单:在 iframe
中加载 WebGL unity,这会沙箱化应用程序。
使用完 unity 应用程序后,只需删除 iframe
的节点,例如:
var iframe=...;
iframe.parentNode.removeChild(iframe);
它和它的所有资源应该立即卸载。
当您处于 iframe 中时,您无法直接与 Unity 播放器通信,但您仍然可以使用 postMessage
.
来回传递消息
Unity 2019.1 提供了退出 webgl 和释放内存的正确方法(虽然它在我的测试中失败了,也许我错了,请告诉我它是否有效):
- C#:调用 Application.Quit()
- JS:调用unityInstance.Quit(回调)
你可以像这样使用JS版本
unityInstance.Quit(function() {
console.log("done!");
});
下载 运行 Unity WebGL
游戏后更改当前页面时,我的 Web 应用程序出现问题。
事实上,我很确定这个游戏是 运行 因为当我的玩家快要死的时候我会不断听到声音。
有没有办法在更改网页时删除所有上下文?这可能是一种内存泄漏吗?
编辑 1:我的 Web 应用程序使用 AngularJS / Material
完成解决方案很简单:在 iframe
中加载 WebGL unity,这会沙箱化应用程序。
使用完 unity 应用程序后,只需删除 iframe
的节点,例如:
var iframe=...;
iframe.parentNode.removeChild(iframe);
它和它的所有资源应该立即卸载。
当您处于 iframe 中时,您无法直接与 Unity 播放器通信,但您仍然可以使用 postMessage
.
Unity 2019.1 提供了退出 webgl 和释放内存的正确方法(虽然它在我的测试中失败了,也许我错了,请告诉我它是否有效):
- C#:调用 Application.Quit()
- JS:调用unityInstance.Quit(回调)
你可以像这样使用JS版本
unityInstance.Quit(function() {
console.log("done!");
});