Explorar el Código

game文件夹放到public里

任一存 hace 1 año
padre
commit
c81086a025

+ 0 - 1
.gitignore

@@ -1,7 +1,6 @@
 .DS_Store
 node_modules
 /dist
-/public/game
 /public/scene
 
 *.zip

BIN
public/game/Build/Build.data.unityweb


BIN
public/game/Build/Build.framework.js.unityweb


La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 1 - 0
public/game/Build/Build.loader.js


BIN
public/game/Build/Build.wasm.unityweb


+ 33 - 0
public/game/ServiceWorker.js

@@ -0,0 +1,33 @@
+const cacheName = "4Dage-H5Game-NanjingMuseum-1.1.0";
+const contentToCache = [
+    "Build/Build.loader.js",
+    "Build/Build.framework.js.unityweb",
+    "Build/Build.data.unityweb",
+    "Build/Build.wasm.unityweb",
+    "TemplateData/style.css"
+
+];
+
+self.addEventListener('install', function (e) {
+    console.log('[Service Worker] Install');
+    
+    e.waitUntil((async function () {
+      const cache = await caches.open(cacheName);
+      console.log('[Service Worker] Caching all: app shell and content');
+      await cache.addAll(contentToCache);
+    })());
+});
+
+self.addEventListener('fetch', function (e) {
+    e.respondWith((async function () {
+      let response = await caches.match(e.request);
+      console.log(`[Service Worker] Fetching resource: ${e.request.url}`);
+      if (response) { return response; }
+
+      response = await fetch(e.request);
+      const cache = await caches.open(cacheName);
+      console.log(`[Service Worker] Caching new resource: ${e.request.url}`);
+      cache.put(e.request, response.clone());
+      return response;
+    })());
+});

+ 36 - 0
public/game/StreamingAssets/aa/AddressablesLink/link.xml

@@ -0,0 +1,36 @@
+<linker>
+  <assembly fullname="Unity.Addressables, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" preserve="all">
+    <type fullname="UnityEngine.AddressableAssets.Addressables" preserve="all" />
+  </assembly>
+  <assembly fullname="Unity.ResourceManager, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" preserve="all">
+    <type fullname="UnityEngine.ResourceManagement.ResourceProviders.AssetBundleProvider" preserve="all" />
+    <type fullname="UnityEngine.ResourceManagement.ResourceProviders.BundledAssetProvider" preserve="all" />
+    <type fullname="UnityEngine.ResourceManagement.ResourceProviders.InstanceProvider" preserve="all" />
+    <type fullname="UnityEngine.ResourceManagement.ResourceProviders.LegacyResourcesProvider" preserve="all" />
+    <type fullname="UnityEngine.ResourceManagement.ResourceProviders.SceneProvider" preserve="all" />
+  </assembly>
+  <assembly fullname="Unity.TextMeshPro, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null">
+    <type fullname="TMPro.TMP_FontAsset" preserve="all" />
+    <type fullname="TMPro.FaceInfo_Legacy" preserve="nothing" serialized="true" />
+    <type fullname="TMPro.FontAssetCreationSettings" preserve="nothing" serialized="true" />
+    <type fullname="TMPro.KerningTable" preserve="nothing" serialized="true" />
+    <type fullname="TMPro.TMP_Character" preserve="nothing" serialized="true" />
+    <type fullname="TMPro.TMP_FontFeatureTable" preserve="nothing" serialized="true" />
+    <type fullname="TMPro.TMP_FontWeightPair" preserve="nothing" serialized="true" />
+  </assembly>
+  <assembly fullname="UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null">
+    <type fullname="UnityEngine.Material" preserve="all" />
+    <type fullname="UnityEngine.Object" preserve="all" />
+    <type fullname="UnityEngine.Shader" preserve="all" />
+    <type fullname="UnityEngine.Texture2D" preserve="all" />
+  </assembly>
+  <assembly fullname="UnityEngine.TextRenderingModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null">
+    <type fullname="UnityEngine.Font" preserve="all" />
+  </assembly>
+  <assembly fullname="UnityEngine.TextCoreFontEngineModule">
+    <type fullname="UnityEngine.TextCore.FaceInfo" preserve="nothing" serialized="true" />
+    <type fullname="UnityEngine.TextCore.Glyph" preserve="nothing" serialized="true" />
+    <type fullname="UnityEngine.TextCore.GlyphMetrics" preserve="nothing" serialized="true" />
+    <type fullname="UnityEngine.TextCore.GlyphRect" preserve="nothing" serialized="true" />
+  </assembly>
+</linker>

BIN
public/game/StreamingAssets/aa/WebGL/defaultlocalgroup_assets_all_4d8d9784050dbfe9105306cf7330ff10.bundle


La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 1 - 0
public/game/StreamingAssets/aa/catalog.json


La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 1 - 0
public/game/StreamingAssets/aa/settings.json


BIN
public/game/TemplateData/favicon.ico


BIN
public/game/TemplateData/img_bg.jpg


BIN
public/game/TemplateData/img_bg@3x.png


BIN
public/game/TemplateData/img_paper.png


BIN
public/game/TemplateData/loading_1.mp4


BIN
public/game/TemplateData/progress-bar-empty-dark.png


BIN
public/game/TemplateData/progress-bar-empty-light.png


BIN
public/game/TemplateData/progress-bar-full-dark.png


BIN
public/game/TemplateData/progress-bar-full-light.png


BIN
public/game/TemplateData/progress.png


+ 5 - 0
public/game/TemplateData/style.css

@@ -0,0 +1,5 @@
+body { padding: 0; margin: 0 }
+#unity-container { position: fixed; width: 100%; height: 100%; }
+#unity-canvas { width: 100%; height: 100%; background: #231F20 }
+#unity-loading-bar { position: absolute; left: 50%; top: 50%; transform: translate(-50%, -50%); display: none }
+#unity-warning { position: absolute; left: 50%; top: 5%; transform: translate(-50%); background: white; padding: 10px; display: none }

+ 59 - 0
public/game/index.css

@@ -0,0 +1,59 @@
+.save-image-block {
+    position: fixed;
+    width: 100%;
+    height: 100%;
+
+    display: flex;
+    justify-content: center;
+    align-items: center;
+    pointer-events: none;
+}
+
+.save-image-backgroup {
+    opacity: 0;
+    pointer-events: none;
+}
+
+#unity-loading {
+    position: fixed;
+    top: 0;
+    left: 0;
+    width: 100%;
+    height: 100%;
+
+    display: flex;
+    justify-content: center;
+    align-items: center;
+}
+
+#unity-loading-paper {
+    position: absolute;
+}
+
+#unity-loading-bg {
+    position: absolute;
+    object-fit: cover;
+    width: 100%;
+    height: 100%;
+}
+
+#unity-loading-video {
+    position: absolute;
+    object-fit: contain;
+    width: 100%;
+    height: 100%;
+}
+
+#unity-loading-progress{
+    position: absolute;
+    width: 30vw;
+    height: 30vw;
+}
+
+#unity-loading-progress-text{
+    position: relative;
+    left: 5px;
+    top: -9px;
+    z-index: 10;
+    color: #fff;
+}

+ 168 - 0
public/game/index.html

@@ -0,0 +1,168 @@
+<!DOCTYPE html>
+<html lang="en-us">
+  <head>
+    <meta charset="utf-8">
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+    <title>无尽藏</title>
+    <link rel="shortcut icon" href="TemplateData/favicon.ico">
+    <link rel="stylesheet" href="TemplateData/style.css">
+    <link rel="manifest" href="manifest.webmanifest">
+    <link rel="stylesheet" href="./index.css">
+  </head>
+  <body>
+    <div id="unity-container">
+      <canvas id="unity-canvas" tabindex="-1"></canvas>
+
+      <div id="unity-loading">
+        <img id="unity-loading-bg" src="./TemplateData/img_bg.jpg" alt="" />
+        <img id="unity-loading-paper" src="./TemplateData/img_paper.png" alt="" />
+        <img id="unity-loading-progress" src="./TemplateData/progress.png" alt="" />
+        <span id="unity-loading-progress-text"></span>
+      </div>
+      
+      <div id="unity-warning"> </div>
+    </div>
+    <div class="save-image-block">
+      <img src="" class="save-image-backgroup" alt="">
+    </div>
+    <script>
+      window.addEventListener("load", function () {
+        if ("serviceWorker" in navigator) {
+          navigator.serviceWorker.register("ServiceWorker.js");
+        }
+      });
+
+      let container = document.querySelector("#unity-container");
+      let canvas = document.querySelector("#unity-canvas");
+      let 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';
+        }
+        let
+                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();
+      }
+
+      let buildUrl = "Build";
+      let loaderUrl = buildUrl + "/Build.loader.js";
+      let config = {
+        dataUrl: buildUrl + "/Build.data.unityweb",
+        frameworkUrl: buildUrl + "/Build.framework.js.unityweb",
+        codeUrl: buildUrl + "/Build.wasm.unityweb",
+        streamingAssetsUrl: "StreamingAssets",
+        companyName: "4Dage",
+        productName: "H5Game-NanjingMuseum",
+        productVersion: "1.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:
+        let 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);
+      }
+
+
+      let isShowLoading = true;
+      const loadingDom = document.querySelector('#unity-loading');
+      const loadingPaperDom = document.querySelector('#unity-loading-paper');
+      const loadingBgDom = document.querySelector('#unity-loading-bg');
+      const progressDom = document.querySelector('#unity-loading-progress');
+      const progressText = document.querySelector('#unity-loading-progress-text');
+
+      progressText.innerHTML = "0%";
+      let opacity = 1;
+      function fadeOutVideo(){
+        if (opacity > 0) {
+          setTimeout(function() {
+            opacity = opacity - 0.05;
+            progressDom.style.opacity = opacity;
+            loadingPaperDom.style.opacity = opacity;
+            loadingBgDom.style.opacity = opacity;
+            fadeOutVideo();
+          }, 20)
+        } else {
+          window.removeEventListener('resize', refreshLoadingPaperBlockSize);
+          loadingDom.remove();
+        }
+      }
+
+      let script = document.createElement("script");
+      script.src = loaderUrl;
+      script.onload = () => {
+        createUnityInstance(canvas, config, (progress) => {
+          progressText.innerHTML = parseInt(progress * 100) + "%";
+        }).then((unityInstance) => {
+          window.unityInstance = unityInstance;
+          fadeOutVideo();
+        }).catch((message) => {
+          alert(message);
+        });
+      };
+      document.body.appendChild(script);
+
+      function refreshLoadingPaperBlockSize() {
+        // Unity画布宽高比
+        const unityCanvasWidth = 1560;
+        const unityCanvasHeight = 3376;
+
+        const unityPanelWidth = 1560;
+        const unityPanelHeight = 3301;
+        const unityPanelOffsetY = 97.5;
+        const unityPanelOffsetX = -34;
+
+        const innerWidth = window.innerWidth;
+        const innerHeight = window.innerHeight;
+
+        const scale = (unityCanvasWidth / unityPanelHeight) >
+        (innerWidth / innerHeight) ? (innerWidth / unityCanvasWidth) : (innerHeight / unityCanvasHeight);
+
+        loadingPaperDom.style.width = (unityPanelWidth * scale) + 'px';
+        loadingPaperDom.style.height = (unityPanelHeight * scale) + 'px';
+
+        if (unityPanelOffsetY > 0){
+          loadingPaperDom.style.marginTop = (unityPanelOffsetY * scale * 2) + 'px';
+        } else {
+          loadingPaperDom.style.marginBottom = (-unityPanelOffsetY * scale * 2) + 'px';
+        }
+
+        if (unityPanelOffsetX > 0){
+          loadingPaperDom.style.marginLeft = (unityPanelOffsetX * scale * 2) + 'px';
+        } else {
+          loadingPaperDom.style.marginRight = (-unityPanelOffsetX * scale * 2) + 'px';
+        }
+      }
+
+      refreshLoadingPaperBlockSize();
+      window.addEventListener('resize', refreshLoadingPaperBlockSize);
+    </script>
+    <script src="./index.js"></script>
+  </body>
+</html>

+ 59 - 0
public/game/index.js

@@ -0,0 +1,59 @@
+const saveDom = document.querySelector('.save-image-backgroup');
+let isShowSaveDom = false;
+
+window.updateTexture = function (title, base64string) {
+    saveDom.src = 'data:image/png;base64,' + base64string;
+    isShowSaveDom = true;
+    saveDom.style.pointerEvents = 'auto';
+    refreshShareBlockSize();
+}
+
+window.gameInitialized = function () {
+}
+
+window.closeGame = function () {
+    window.parent?.closeGame();
+}
+
+window.closePanel = function () {
+    isShowSaveDom = false;
+    saveDom.style.pointerEvents = 'none';
+}
+
+window.clickEdit = function () {
+    window.parent?.isShowToastFromGame()
+}
+
+// 提供给父页面点击保存按钮使用
+window.saveTitle = function(msg) {
+    window.unityInstance.SendMessage('WebEvent', 'UpdateTextureContent', msg)
+}
+
+function refreshShareBlockSize() {
+
+    // Unity画布宽高比
+    let unityCanvasWidth = 1560;
+    let unityCanvaslHeight = 3376;
+    let unityPanelWidth = 1450;
+    let unityPanelHeight = 2800;
+    let unityPanelOffsetY = -148;
+
+    let innerWidth = window.innerWidth;
+    let innerHeight = window.innerHeight;
+
+    let scale = (unityCanvasWidth / unityPanelHeight) >
+        (innerWidth / innerHeight) ? (innerWidth / unityCanvasWidth) : (innerHeight / unityCanvaslHeight);
+    
+    saveDom.style.width = (unityPanelWidth * scale) + 'px';
+    saveDom.style.height = (unityPanelHeight * scale) + 'px';
+    
+    if (unityPanelOffsetY > 0){
+        saveDom.style.marginTop = (unityPanelOffsetY * scale * 2) + 'px';
+    } else {
+        saveDom.style.marginBottom = (-unityPanelOffsetY * scale * 2) + 'px';
+    }
+}
+
+window.addEventListener('resize', ()=>{
+    if (isShowSaveDom) refreshShareBlockSize();
+});

+ 15 - 0
public/game/manifest.webmanifest

@@ -0,0 +1,15 @@
+{
+    "name": {{{ JSON.stringify(PRODUCT_NAME) }}},
+    "short_name": {{{ JSON.stringify(PRODUCT_NAME) }}},
+    "start_url": "index.html",
+    "display": "fullscreen",
+    "background_color": "{{{ BACKGROUND_COLOR }}}",
+    "theme_color": "{{{  SPLASH_SCREEN_STYLE.toLowerCase() === 'light' ? '#fff' : '#000' }}}",
+    "description": {{{ JSON.stringify(PRODUCT_DESCRIPTION) }}},
+    "icons": [{
+      "src": "TemplateData/icons/unity-logo-{{{ SPLASH_SCREEN_STYLE.toLowerCase() }}}.png",
+      "sizes": "144x144",
+      "type": "image/png",
+      "purpose": "any maskable"
+    }]
+  }