Unity 發(fā)布WebGL

1.WebGL打包設(shè)置

1.1 壓縮包問(wèn)題

構(gòu)建完的包里是壓縮包,如果服務(wù)器里沒(méi)有解壓縮的工具,就會(huì)無(wú)法打開項(xiàng)目


發(fā)布設(shè)置.png

勾上解壓縮回退,即可解決該問(wèn)題


壓縮方法.png

一般選擇gzip壓縮

1.2 異常處理

直接關(guān)閉異常,提高性能

1.3 WebGL模板設(shè)置

WebGL模板.png

我們經(jīng)常需要修改Unity默認(rèn)的加載界面,避免每次構(gòu)建后重新修改Html文件,可以做一個(gè)自己的模板


WebGL模板2.png

在Assets文件夾下創(chuàng)建文件夾 WebGLTemplates
首先選擇默認(rèn)模板Default構(gòu)建一次,然后找到Build里的文件,把TemplateData文件夾和index.html復(fù)制進(jìn)來(lái)(這個(gè)是官方默認(rèn)的模板)進(jìn)行修改即可
可以在script.onload函數(shù)里進(jìn)行添加邏輯


保存緩沖區(qū).png

該行代碼可以強(qiáng)制瀏覽器保存緩沖區(qū),提高性能

2.資源處理問(wèn)題

2.1 中文字不顯示=默認(rèn)字體Arial

在WebGL項(xiàng)目構(gòu)建后,使用Arial字體的文本中,中文字符將無(wú)法顯示,所以我們需要手動(dòng)更改字體文件
以windows為例


字體文件.png

在這個(gè)文件夾中有默認(rèn)的字體文件,我們選取一個(gè)放入項(xiàng)目中,用來(lái)顯示中文字即可

2.2 Video文件無(wú)法播放

Video文件會(huì)在構(gòu)建時(shí)被壓縮,導(dǎo)致無(wú)法使用
我們需要使用url方式去加載視頻播放(邊下邊播)
1.視頻文件放在cdn上直接加載
2.創(chuàng)建StreamingAssets文件夾(Assets目錄下)
在這個(gè)文件夾下的資源不會(huì)被unity處理,直接打包

           //資源放在StreamingAssets的Video文件夾中
           m_videoplayer.url = Application.streamingAssetsPath + "/Video/scene.mp4";
           m_videoplayer.Play();

使用Application.streamingAssetsPath獲取目錄
在WebGL中,返回的是當(dāng)前目錄(".")
不同的平臺(tái)返回的路徑不同

3.場(chǎng)景光照不對(duì)

在多場(chǎng)景的情況下,構(gòu)建后會(huì)出現(xiàn) 跳轉(zhuǎn)到其他場(chǎng)景中時(shí),發(fā)現(xiàn)光照不對(duì)
(多半是構(gòu)建時(shí),打開的場(chǎng)景光照正確,沒(méi)有打開的場(chǎng)景光照錯(cuò)誤)
這個(gè)時(shí)候需要烘焙光照貼圖,即可解決該問(wèn)題

4.與瀏覽器js腳本進(jìn)行交互

4.1 C#調(diào)用js

在Assets目錄下創(chuàng)建文件夾Plugins
創(chuàng)建文件 js(name).jslib


js.png
mergeInto(LibraryManager.library, {

  Hello: function (v) {
    testFunc(Pointer_stringify(v));
  },

  startRecord : function() {
      startRecord();
  },
  stopRecord : function() {
      stopRecord();
  },

});

基于最新的unity官方文檔
使用mergeInto聲明js腳本方法
在C#腳本中使用

//命名空間
using System.Runtime.InteropServices;


    [DllImport("__Internal")]
    private static extern void Hello();

使用[DllImport()] 聲明js里的hello方法,即可直接調(diào)用

注意的是字符串傳遞需要使用 Pointer_stringify(string v) 方法進(jìn)行一個(gè)轉(zhuǎn)換

4.2 js調(diào)用C#

如果要從嵌入在項(xiàng)目中的 JavaScript 插件執(zhí)行調(diào)用,可使用以下代碼

//__objectName__ 是場(chǎng)景中的對(duì)象名稱;__methodName__ 是當(dāng)前附加到該對(duì)象的腳本中的方法名稱;__value__ 可以是字符串、數(shù)字,也可為空。
unityInstance.SendMessage(objectName, methodName, value);

//e.g.
unityInstance.SendMessage('MyGameObject', 'MyFunction');
unityInstance.SendMessage('MyGameObject', 'MyFunction', 5);
unityInstance.SendMessage('MyGameObject', 'MyFunction', 'MyString');
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容