測(cè)試時(shí)間2023.8.10
官方文檔說明
依據(jù)Unity官方最新版本文檔(2021.3LTS),關(guān)于WebGL的兼容性說明為"Unity WebGL不支持移動(dòng)設(shè)備。它可能適用于高端設(shè)備,但當(dāng)前的設(shè)備通常不夠強(qiáng)大,并且沒有足夠的內(nèi)存來支持Unity WebGL內(nèi)容。為了讓最終用戶意識(shí)到這一點(diǎn),當(dāng)最終用戶嘗試在移動(dòng)瀏覽器上加載 Unity WebGL 應(yīng)用程序時(shí),Unity WebGL 的默認(rèn)模板會(huì)顯示一條警告消息。要從應(yīng)用程序中刪除此警告,請(qǐng)?zhí)砑幽约旱?WebGL 模板。有關(guān)如何執(zhí)行此操作的信息,請(qǐng)參閱添加 WebGL 模板。"
按照官方文檔關(guān)閉在移動(dòng)瀏覽器上加載 Unity WebGL 應(yīng)用程序時(shí)的警告后進(jìn)行實(shí)際測(cè)試。
測(cè)試1
以下測(cè)試目前僅使用蘋果及安卓系統(tǒng)測(cè)試:
項(xiàng)目規(guī)模 | 桌面瀏覽器運(yùn)行情況 | 移動(dòng)設(shè)備瀏覽器運(yùn)行情況 |
---|---|---|
空包項(xiàng)目/僅單模型/極小功能項(xiàng)目 | 全部可運(yùn)行 | 全部可運(yùn)行 |
已完成的部分成品項(xiàng)目測(cè)試(選擇包體大約40-80MB,空包+必須字體包體在25M左右) | 全部可運(yùn)行 | 目前測(cè)試,加載速度慢為通病;安卓系統(tǒng)基本都可加載訪問;蘋果系統(tǒng)加載完成后重復(fù)加載導(dǎo)致網(wǎng)頁崩潰。其他如鴻蒙等移動(dòng)端系統(tǒng)未測(cè)試。 |
針對(duì)于蘋果系統(tǒng)無法正常加載問題,查看Safari Console,并無任何報(bào)錯(cuò)及異常提示。
并且測(cè)試過程中發(fā)現(xiàn)并非是較大的項(xiàng)目會(huì)導(dǎo)致網(wǎng)頁崩潰,所以項(xiàng)目大小與是否崩潰沒有直接關(guān)系。
初步定位原因:內(nèi)存溢出。
測(cè)試2
使用上圖附帶代碼測(cè)試,重新復(fù)現(xiàn)之前的問題,觸發(fā)此循環(huán)邏輯后,項(xiàng)目重新加載,進(jìn)而網(wǎng)頁崩潰。
同樣邏輯在pc平臺(tái)無問題。
初步定位原因:內(nèi)存溢出。
測(cè)試3
加載結(jié)束,進(jìn)入場(chǎng)景后,在工廠模型內(nèi)部游覽,僅旋轉(zhuǎn)視角瀏覽過程中,突發(fā)網(wǎng)頁崩潰,。
同樣在桌面瀏覽器無問題。
初步定位原因:未知,可能是webgl渲染導(dǎo)致崩潰。
測(cè)試4
加載結(jié)束,在視野中生成2-5個(gè)工廠模型,直接畫布卡死/網(wǎng)頁崩潰。
加載結(jié)束,在視野外生成2-20+個(gè)工廠模型,未出現(xiàn)崩潰及卡死現(xiàn)象。
同樣在桌面瀏覽器無問題。
初步定位原因:未知,可能是webgl渲染導(dǎo)致崩潰。
結(jié)論:
總體來說,印證了Unity官方文檔中所說明的“當(dāng)前的移動(dòng)設(shè)備通常不夠強(qiáng)大,并且沒有足夠的內(nèi)存來支持Unity WebGL內(nèi)容?!?。
不僅如此,除了官方提及的內(nèi)存,渲染能力也與桌面GPU性能相差甚遠(yuǎn)。
在這樣的情況下,可以進(jìn)行一定程度上簡(jiǎn)單、輕量的項(xiàng)目開發(fā)。
- 性能差異:WebGL渲染需要GPU資源,而移動(dòng)設(shè)備的GPU可能不如桌面GPU那么強(qiáng)大或者優(yōu)化。
-
內(nèi)存溢出:安卓的內(nèi)存普遍較大,但不同型號(hào)的蘋果手機(jī)內(nèi)存不同。如,iPhone 12 Pro Max 和 iPhone 13 Pro Max,RAM 已經(jīng)增加到了 6GB。iPhone 13 Mini 和 iPhone 13 則配備了 4GB 的 RAM。內(nèi)存泄露一般會(huì)在Console進(jìn)行異常提示,但在測(cè)試過程中并未發(fā)現(xiàn)有任何相關(guān)提示。WebGL 內(nèi)容在瀏覽器中運(yùn)行。瀏覽器在其內(nèi)存空間中分配應(yīng)用程序運(yùn)行內(nèi)容所需的內(nèi)存。 可用內(nèi)存量因以下因素而異:
a. 使用的設(shè)備
b. 使用的操作系統(tǒng)
c. 使用的瀏覽器,以及是在 32 位還是 64 位處理器上運(yùn)行
d. 瀏覽器的 JavaScript 引擎解析代碼所需的內(nèi)存量
e. 瀏覽器為每個(gè)選項(xiàng)卡使用單獨(dú)進(jìn)程,但是內(nèi)容需要與所有其他打開的選項(xiàng)卡共享內(nèi)存空間 - 網(wǎng)絡(luò)限制:Unity WebGL 輸出包含了引擎的大部分,在移動(dòng)網(wǎng)絡(luò)上,下載WebGL應(yīng)用的數(shù)據(jù)可能會(huì)很慢,這會(huì)影響加載時(shí)間和用戶體驗(yàn)。
- WebGL調(diào)試:移動(dòng)設(shè)備環(huán)境無法連接到編輯器Profiler進(jìn)行內(nèi)存占用診斷,很難在打包后確定具體大內(nèi)存資源或邏輯。
- 兼容性適配:為了在移動(dòng)設(shè)備上獲得最佳的Unity WebGL體驗(yàn),需要進(jìn)行大量不同移動(dòng)設(shè)備(鴻蒙等其他系統(tǒng))及不同瀏覽器(chrome,Safari及微信、手機(jī)內(nèi)置瀏覽器等)的測(cè)試和優(yōu)化,包括壓縮資源、優(yōu)化渲染和功能剔除等,以確??梢约嫒荽蟛糠衷O(shè)備。
2、3注釋:
UnityWebGL并未從一開始就考慮到了瀏覽器和設(shè)備的兼容性問題。與其他Web3d應(yīng)用程序較為輕量,更容易適應(yīng)各種設(shè)備和網(wǎng)絡(luò)條件不同。
UnityWebGL的引擎仍然包含許多為其他平臺(tái)設(shè)計(jì)的功能和系統(tǒng),導(dǎo)致空包+中文字體打包后的大小就在25MB,相對(duì)于其他web3d引擎來說在移動(dòng)端的加載時(shí)間很慢。這是因?yàn)槠渌鹷eb3d引擎通常只包括所需的部分從而減少了文件大小和加載時(shí)間。
并且專業(yè)的web3d引擎針對(duì)新的 Web 技術(shù)和瀏覽器更新進(jìn)行的迭代更快。
UnityWebGL與其他web3d引擎由于設(shè)計(jì)哲學(xué)和目標(biāo)市場(chǎng)的不同,它們?cè)谝苿?dòng)瀏覽器的兼容性上可能會(huì)有所不同。
開發(fā)方案
- 建議提前開始使用UnityWebGL進(jìn)行開發(fā),將基本功能開發(fā)完成測(cè)試,確保足夠的時(shí)間進(jìn)行兼容性適配。
- Unity WebGL轉(zhuǎn)微信小游戲,將產(chǎn)品發(fā)布在微信小程序平臺(tái),由轉(zhuǎn)換工具與微信小游戲運(yùn)行環(huán)境保證適配兼容,并且轉(zhuǎn)換工具提供高性能模式。但微信小游戲發(fā)布需要軟著、游戲自身自查報(bào)告。(注:轉(zhuǎn)換工具僅可將unityWebGL轉(zhuǎn)換為微信小游戲)
- 使用其他web3d引擎開發(fā)。
測(cè)試時(shí)間2023.8.11
詳細(xì)內(nèi)存界限測(cè)試
以4G/6G內(nèi)存蘋果手機(jī)Chrome及Safari瀏覽器為例,穩(wěn)定申請(qǐng)總內(nèi)存400+MB后崩潰,因此移動(dòng)設(shè)備瀏覽器對(duì)于UnityWebGL的內(nèi)存限制大約是桌面瀏覽器的1/5。
并且手機(jī)瀏覽器加載47M模型時(shí),同樣崩潰,猜測(cè)顯存超出也會(huì)導(dǎo)致網(wǎng)頁崩潰;而同樣模型在桌面瀏覽器上無論生成多少個(gè)都不會(huì)導(dǎo)致網(wǎng)頁崩潰,僅幀率降低。
同樣僅10M大小的模型,總大小15M的貼圖文件,在桌面/手機(jī)瀏覽器分別測(cè)試:
- 基礎(chǔ)占用:桌面瀏覽器占用56.1 MB,手機(jī)瀏覽器占用99.8 MB。
- 貼圖占用:相機(jī)渲染必需(相機(jī)深度渲染貼圖占用30M,渲染緩存Buffer貼圖占用60M,陰影貼圖32M,屏幕陰影貼圖20M),模型貼圖占用桌面瀏覽器占用24.8 MB,手機(jī)瀏覽器占用195.1 MB。
經(jīng)此測(cè)試,貼圖/UI等圖片資源可能因硬件平臺(tái)不同,導(dǎo)致資源壓縮格式不同或壓縮失效。相同的貼圖/UI資源,在移動(dòng)瀏覽器上會(huì)比在桌面瀏覽器中占用更大的內(nèi)存/顯存。文章來源:http://www.zghlxwxcb.cn/news/detail-638166.html
至此,內(nèi)存/顯存的超出都會(huì)導(dǎo)致網(wǎng)頁崩潰。文章來源地址http://www.zghlxwxcb.cn/news/detail-638166.html
提示:
- 因資源加載進(jìn)入引擎需要引擎內(nèi)部識(shí)別及一些其他描述字段,所以加載入引擎內(nèi)存的大小是有可能比原資源文件更大的。
- 如6KB Icon圖片,引擎打包時(shí)可壓縮到2KB,加載入內(nèi)存大小66KB,并且渲染需要其他引擎組件,如Sprite、Image等,也會(huì)額外占用一些內(nèi)存大小。
- 這是因?yàn)橥ǔDP突驁D片等資源為結(jié)構(gòu)緊湊的二進(jìn)制文件,但在讀取到內(nèi)存中時(shí)將會(huì)被解壓,并且有其特定的內(nèi)存表示,所以會(huì)占用比原文件大小更多的內(nèi)存。
- 也正是因?yàn)橐陨显?,?xiàng)目的大小與需要的內(nèi)存大小并沒有直接關(guān)系。
使用UnityWebGL在手機(jī)瀏覽器運(yùn)行存在問題:
- 手機(jī)瀏覽器資源壓縮失效,將會(huì)占用比網(wǎng)頁瀏覽器更多的內(nèi)存。
- 總內(nèi)存占用超過400MB(實(shí)際所能使用的大概可以有接近300M)即網(wǎng)頁崩潰。
- 渲染較多場(chǎng)景物體時(shí),網(wǎng)頁崩潰。
- 通常,移動(dòng)設(shè)備使用集成的圖形處理單元(GPU),這意味著 GPU 和中央處理單元(CPU)共享相同的物理內(nèi)存。所以手機(jī)瀏覽器所分配的內(nèi)存空間會(huì)更加吃緊。
到了這里,關(guān)于UnityWebGL移動(dòng)端兼容性說明的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!