小工具知识网

当前位置: 首页 > 行业知识 > Unity打包WebGL后 自适应网页分辨率

行业知识

Unity打包WebGL后 自适应网页分辨率

2026-11-05 04:07:52 来源:互联网转载

使用版本:Unity2022.3.14

效果: 可自适应 ,留白为黑色

视频效果:

2024-03-21-16-46-25-CSDN直播

坑1

top left 无效,无法居中显示游戏内容

原因; position 不能是 static 改为absolute

 

坑2

留白改为黑色

      html    {      background-color: black;    }  

修改步骤

1 自适应代码块('unity-canvas'拼写需要和上发一样 不然无效)

       var unityContainer = document.getElementById('unity-canvas');      function unityContainerResize()      {        var w = window.innerWidth || document.body.clientWidth,                h = window.innerHeight || document.body.clientHeight,                ratio = 16 / 9,                r = w/h;        var setW, setH, setTop, setLeft;        if (r >= ratio) { // 高度撑满          setW = h * ratio;          setLeft = (w - setW) / 2;        } else { // 宽度撑满          setH = w / ratio;          setTop = (h - setH) / 2;        }                unityContainer.style.width = (setW || w) + 'px';        unityContainer.style.height = (setH || h) + 'px';        unityContainer.style.top = (setTop || 0) + 'px';        unityContainer.style.left = (setLeft || 0) + 'px';      }      window.addEventListener('resize', unityContainerResize)      unityContainerResize()    

2 修改了positon属性为absolute

 

3 修改默认 留白为留黑

    html    {      background-color: black;    }  

完整代码

在unity打包后的index.php/tags-522.html" >文件夹下面名字是index.html

按照上方修改步骤进行

              Unity WebGL Player | TestWebGL                                                                                                 window.addEventListener("load", function () {        if ("serviceWorker" in navigator) {          navigator.serviceWorker.register("ServiceWorker.js");        }      });      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 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 p = document.createElement('p');        p.innerHTML = msg;        warningBanner.appendChild(p);        if (type == 'error') p.style = 'background: red; padding: 10px;';        else {          if (type == 'warning') p.style = 'background: yellow; padding: 10px;';          setTimeout(function () {            warningBanner.removeChild(p);            updateBannerVisibility();          }, 5000);        }        updateBannerVisibility();      }      var buildUrl = "Build";      var loaderUrl = buildUrl + "/TestWebGL.loader.js";      var config = {        dataUrl: buildUrl + "/TestWebGL.data",        frameworkUrl: buildUrl + "/TestWebGL.framework.js",        codeUrl: buildUrl + "/TestWebGL.wasm",        streamingAssetsUrl: "StreamingAssets",        companyName: "DefaultCompany",        productName: "TestWebGL",        productVersion: "0.1",        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);      }      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";        }).catch((message) => {          alert(message);        });      };      document.body.appendChild(script);                  // 自适应代码块      var unityContainer = document.getElementById('unity-canvas');      function unityContainerResize()      {        var w = window.innerWidth || document.body.clientWidth,                h = window.innerHeight || document.body.clientHeight,                ratio = 16 / 9,                r = w/h;        var setW, setH, setTop, setLeft;        if (r >= ratio) { // 高度撑满          setW = h * ratio;          setLeft = (w - setW) / 2;        } else { // 宽度撑满          setH = w / ratio;          setTop = (h - setH) / 2;        }                unityContainer.style.width = (setW || w) + 'px';        unityContainer.style.height = (setH || h) + 'px';        unityContainer.style.top = (setTop || 0) + 'px';        unityContainer.style.left = (setLeft || 0) + 'px';      }      window.addEventListener('resize', unityContainerResize)      unityContainerResize()              html    {      background-color: black;    }  

声明

代码借鉴的不同帖子的代码非完全原创

仅仅作为记录!

上一篇:服务器cup到底怎么样?

下一篇:PHP 5.3源码深度解析,洞悉语言核心机制,源码世界探索之旅