В WebGL приложении пропадает русский язык и видео фон

Рейтинг: 1Ответов: 1Опубликовано: 01.06.2023

сделал приложение на Unity и использовал технологию WebGL, хочу загрузить на Яндекс игры, но есть две проблемы.

  1. На всех серверах на которых запускал приложение исчезает русский язык. Английский язык, цифры и знаки остаются. Пробовал кодировки UTF-8 и UTF-8 со спецификацией, пытался отдельно добавить русский язык в коде HTML, но ничего не помогло. Компилировал под PC всё хорошо.введите сюда описание изображения

<html lang="en-us">
<head>
    <meta charset="utf-8">
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>Unity WebGL Player | Russian-English transliterator</title>
    <link rel="shortcut icon" href="TemplateData/favicon.ico">
    <link rel="stylesheet" href="TemplateData/style.css">

    <!-- Yandex Games SDK -->
    <script src="https://yandex.ru/games/sdk/v2"></script>

</head>
<body>
    <div id="unity-container" style="position: absolute; width: 100%; height: 100%; left: 0%; top: 0%;">
        <canvas id="unity-canvas" style="position: absolute; width: 100%; height: 100%;"></canvas>
        <div id="unity-loading-bar">
            <div id="unity-logo"></div>
            <div id="unity-progress-bar-empty">
                <div id="unity-progress-bar-full"></div>
            </div>
        </div>
        <div id="unity-warning"> </div>
    </div>

    <script>
        YaGames
            .init()
            .then(ysdk => {
                console.log('Yandex SDK initialized');
                window.ysdk = ysdk;
            });
    </script>

    <script>

        var container = document.querySelector("#unity-container");
        var canvas = document.querySelector("#unity-canvas");
        var loadingBar = document.querySelector("#unity-loading-bar");
        var progressBarFull = document.querySelector("#unity-progress-bar-full");
        //var fullscreenButton = document.querySelector("#unity-fullscreen-button");
        var warningBanner = document.querySelector("#unity-warning");

        // Shows a temporary message banner/ribbon for a few seconds, or
        // a permanent error message on top of the canvas if type=='error'.
        // If type=='warning', a yellow highlight color is used.
        // Modify or remove this function to customize the visually presented
        // way that non-critical warnings and error messages are presented to the
        // user.
        function unityShowBanner(msg, type) {
            function updateBannerVisibility() {
                warningBanner.style.display = warningBanner.children.length ? 'block' : 'none';
            }
            var div = document.createElement('div');
            div.innerHTML = msg;
            warningBanner.appendChild(div);
            if (type == 'error') div.style = 'background: red; padding: 10px;';
            else {
                if (type == 'warning') div.style = 'background: yellow; padding: 10px;';
                setTimeout(function () {
                    warningBanner.removeChild(div);
                    updateBannerVisibility();
                }, 5000);
            }
            updateBannerVisibility();
        }

        var buildUrl = "Build";
        var loaderUrl = buildUrl + "/Pack.loader.js";
        var config = {
            dataUrl: buildUrl + "/Pack.data.unityweb",
            frameworkUrl: buildUrl + "/Pack.framework.js.unityweb",
            codeUrl: buildUrl + "/Pack.wasm.unityweb",
            streamingAssetsUrl: "StreamingAssets",
            companyName: "LeW_X",
            productName: "Russian-English transliterator",
            productVersion: "1.0",
            showBanner: unityShowBanner,
        };

        // By default Unity keeps WebGL canvas render target size matched with
        // the DOM size of the canvas element (scaled by window.devicePixelRatio)
        // Set this to false if you want to decouple this synchronization from
        // happening inside the engine, and you would instead like to size up
        // the canvas DOM size and WebGL render target sizes yourself.
        // config.matchWebGLToCanvasSize = false;

        if (/iPhone|iPad|iPod|Android/i.test(navigator.userAgent)) {
            // Mobile device style: fill the whole browser client area with the game canvas:

            var meta = document.createElement('meta');
            meta.name = 'viewport';
            meta.content = 'width=device-width, height=device-height, initial-scale=1.0, user-scalable=no, shrink-to-fit=yes';
            document.getElementsByTagName('head')[0].appendChild(meta);
            container.className = "unity-mobile";
            canvas.className = "unity-mobile";

            // To lower canvas resolution on mobile devices to gain some
            // performance, uncomment the following line:
            // config.devicePixelRatio = 1;


        } else {
            // Desktop style: Render the game canvas in a window that can be maximized to fullscreen:

            canvas.style.width = "100%";
            canvas.style.height = "100%";
        }

        canvas.style.background = "url('" + buildUrl + "/Pack.jpg.unityweb') center / cover";
        loadingBar.style.display = "block";

        var script = document.createElement("script");
        script.src = loaderUrl;
        script.onload = () => {
            createUnityInstance(canvas, config, (progress) => {
                progressBarFull.style.width = 100 * progress + "%";
            }).then((unityInstance) => {
                loadingBar.style.display = "none";
                //fullscreenButton.onclick = () => {
                //  unityInstance.SetFullscreen(1);
                // };
            }).catch((message) => {
                alert(message);
            });
        };

        document.body.appendChild(script);

    </script>
</body>
</html>

  1. Не отображается видео фон, который я добавил в Unity. Приложение должно выглядеть так.

введите сюда описание изображения

Ответы

▲ 0

Нужно подключить шрифты: стандартный в Unity или кастомный(е) в файл HTML. С видео я так и не разобрался, нашёл информацию о том, что нужно подключать по URL, на всё равно не заработало.