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

种地  金牌会员 | 2024-6-14 22:26:06 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 556|帖子 556|积分 1668

利用版本:Unity2022.3.14

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

视频效果:
2024-03-21-16-46-25-CSDN直播
坑1

top left 无效,无法居中显示游戏内容
原因; position 不能是 static 改为absolute
  1. <canvas id="unity-canvas"
  2. style=" position: absolute; width: 1920px; height: 1080px;">
  3. </canvas>
复制代码
坑2

留白改为黑色
  1.   <style>
  2.     html
  3.     {
  4.       background-color: black;
  5.     }
  6.   </style>
复制代码

修改步骤

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

  1. <script>
  2.       var unityContainer = document.getElementById('unity-canvas');
  3.       function unityContainerResize()
  4.       {
  5.         var w = window.innerWidth || document.body.clientWidth,
  6.                 h = window.innerHeight || document.body.clientHeight,
  7.                 ratio = 16 / 9,
  8.                 r = w/h;
  9.         var setW, setH, setTop, setLeft;
  10.         if (r >= ratio) { // 高度撑满
  11.           setW = h * ratio;
  12.           setLeft = (w - setW) / 2;
  13.         } else { // 宽度撑满
  14.           setH = w / ratio;
  15.           setTop = (h - setH) / 2;
  16.         }
  17.         
  18.         unityContainer.style.width = (setW || w) + 'px';
  19.         unityContainer.style.height = (setH || h) + 'px';
  20.         unityContainer.style.top = (setTop || 0) + 'px';
  21.         unityContainer.style.left = (setLeft || 0) + 'px';
  22.       }
  23.       window.addEventListener('resize', unityContainerResize)
  24.       unityContainerResize()
  25.     </script>
复制代码
2 修改了positon属性为absolute

  1. <canvas id="unity-canvas"
  2. style=" position: absolute; width: 1920px; height: 1080px;">
  3. </canvas>
复制代码
3 修改默认 留白为留黑

  1. <style>
  2.     html
  3.     {
  4.       background-color: black;
  5.     }
  6.   </style>
复制代码
完备代码

在unity打包后的文件夹下面名字是index.html
按照上方修改步骤举行
  1. <!DOCTYPE html><html lang="en-us">  <head>    <meta charset="utf-8">    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">    <title>Unity WebGL Player | TestWebGL</title>    <link rel="shortcut icon" href="TemplateData/favicon.ico">    <link rel="stylesheet" href="TemplateData/style.css">    <link rel="manifest" href="manifest.webmanifest">  </head>  <body>    <div id="unity-container">      <canvas id="unity-canvas"
  2. style=" position: absolute; width: 1920px; height: 1080px;">
  3. </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>      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 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 + "/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);    </script>        <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()    </script>    </body>
  4.   <style>
  5.     html
  6.     {
  7.       background-color: black;
  8.     }
  9.   </style></html>
复制代码
声明

代码鉴戒的不同帖子的代码非完全原创
仅仅作为记录!




免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

种地

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表