Добрый день, я пишу небольшой сайт на sveltekit, на котором использую три UnityWebgl приложения, которые можно открыть и переключать в одном компоненте. Приложения корректно загружаются и переключаются, но при каждом новом открытом UnityWebgl приложении, растет потребление RAM вкладкой с сайтом (страницу при этом я не перезагружаю, очень хотелось бы этого избежать). На скрине пример того, как я инициализирую, потом уничтожаю несколько раз один и тот же UnitywebGl объект:
Итого, получается, что после нескольких переключений объектов приложение падает с ошибкой нехватки памяти. Сами по себе приложения памяти потребляют в разумных пределах, проблема исключительно в том, что после уничтожения (куча?) не освобождается, а в следующий раз снова аллоцируется. Вот моя функция по уничтожению Unitywebgl компонента
xport async function destroyUnityInstance() {
if (!unityInstance) return;
try {
await unityInstance.Quit();
unityInstance = null;
if (canvas) {
let gl = canvas.getContext("webgl2") || canvas.getContext("webgl");
if (gl) {
let ext = gl.getExtension("WEBGL_lose_context");
if (ext) {
ext.loseContext();
}
}
}
if (canvas && canvas.parentNode) {
console.error("Canvas was removed!");
canvas.parentNode.removeChild(canvas);
canvas = null;
}
if (canvas && canvas.style) {
canvas.style.display = "none";
}
if (script) {
script.src = "";
document.head.removeChild(script);
script = null;
}
} catch (error) {
console.error("Error quitting Unity instance:", error);
}
}
Судя по логам всё уничтожается успешно и проблем кроме этой нет. Читал документацию Unity но не нашел конкретно своего примера
p.s. Я использую обычный canvas:
<div id="unity-container" class="unity-desktop">
{#if isAnimationHidden === false}
<PointerAnimation />
{/if}
<canvas id="unity-canvas" on:click={hideAnimation}></canvas>
</div>
а не iframe, хотелось бы избежать использования iframe