Unity Webgl 問題總結


轉載自:https://www.it610.com/article/1295062035498868736.htm

1.webgl不顯示字體
開始導出來發現一些字不顯示,還以為分辨率壓縮Text文本導致字不顯示,后來發現原來是webgl的問題,查閱信息說不要使用unity自帶的字體即可。
2.webgl無法輸入中文
某牛博主解決中文輸入插件
CSDN博主分享中文輸入插件
兩者綜合使用!
3.字體模糊
這個比較常見,unity默認使用Text的字體放大就會很模糊,甚至看不清,解決這個問題的辦法就是使用TextMeshProUGUI插件,這個插件可以在PackageManager里下載。
這個插件的優點是:
1.你可以自己制作不同的字體;
2.無論放大多少倍,或者字體大小很小時,都會很清晰的顯示;
4.webgl導出包瀏覽器打開報錯超出內存大小
做成webgl的項目或多或少會出現這樣的錯誤,經查找官方資料,使用unity2018版的可以調節導出包使用內存的大小,unity2019版本開始就刪除了改變內存大小的值,:(然后找到有個解決辦法是代碼改變內存大小,發現Universal WebGL template模板下有段代碼被注釋了就是改變內存大小的,然后試着加大內存的值,在火狐瀏覽器是可以正常打開的,然而在Google瀏覽器就直接報另外一種錯誤,欲哭無淚,甲方要求使用的是Google瀏覽器,只能另尋其他辦法,最后找到的解決方案就是使用Asset Bundle來加載包,減少包的大小,減少內存的使用。
5.webgl使用Asset Bundle加載資源模型材質顯示異常
剛開始導出webgl包和ab包,使用瀏覽器加載,然后發現一片紅啊,使用ab包加載的有一部分模型材質顯示為粉紅色,第一反應就是材質丟失,以為是ab包卸載了材質的資源,然后經過更改代碼不使用卸載,發現還是一樣。。。那就不是這個原因了,網上查閱了一些資料,發現原來需要將相關的shader添加到ProjectSettings->Graphics->Always Included Shaders里,切記將unity Standard材質包含在內,不然你會發現你導出webgl包會非常慢並且你的包的大小會很大,因為它包含了成白上千種shader,所以這里盡量少使用Standard,使用也可以,就是效果會變化,在編輯器顯示很好,導出來就跟換了一種shader一樣,盡量使用其它可以替代它的shader,或你可以去編寫shader,或使用ShaderGraph插件編寫的shader,然后包含在這里就可以了,這樣導出速度快且包小。
6.webgl使用Asset Bundle加載資源的一些注意事項
使用Asset Bundle Browser插件,可以在PackageManager里下載,使用教程網上也有很多,這個插件小編覺得蠻好用的,可以顯示不同ab包是否有重復的資源,讓開發者減少ab包的大小。下面是使用ab包的一些注意事項:盡量使用多個ab包,且每個ab包大小不要超過20M,使用ab包分類管理;盡量不使用阻斷協程的方法來加載ab包;ProjectSettings->Player->Strip Engine Code不要勾選;加載后注意要記得UnLoad(false),減少內存的使用;ab包使用的shader要包含在ProjectSettings->Graphics->Always Included Shaders里;使用LZ4壓縮。
7.webgl播放視頻
這個算是比較簡單,網上插件也比較多,unity自帶的VideoPlayer,可以播放本地視頻和Url,注意需要一開始時不要勾選Play on Awake,在瀏覽器會播放不出視頻,我使用的是AVProVideo,這個插件還不錯,支持PC、android、IOS、Webgl、Mac等平台,可以自行選擇,網上教程也有很多,同樣注意開始時不播放視頻。
8.webgl播放視頻流實時視頻
項目中有播放rtsp視頻流的要求,然后查閱了一些資料,找了半天就看見一個插件UMP Pro Win Mac Linux WebGL ,用了之后發現webgl好像不支持,實屬垃圾,后面找到一篇Unity WebGl播放m3u8在線視頻(監控,直播)解決方案,這篇很不錯,想學習的可以試試。
9.webgl json序列化和反序列化問題
使用unity自帶的JsonUtility.FromJson()解析json數據在編輯器可以很好的解析,即使定義為int型數據,數值為Null,這個在webgl里也可以解析,但是有些數據結構是不能正常解析的,比如Dictionary字典,在編輯器能正常解析,但是在webgl里就不能正常解析了,后面找了另外一個Newtonsoft.Json來解析,這個可以正常的解析字典數據,但是要求你定義正確,unity自帶的JsonUtility.FromJson()不需要定義屬性正確,可能還會出現某些人給你的接口定義某屬性是int型,但是給的數據卻是null,這類人也不少吧,那怎么辦呢,使用Newtonsoft.Json來解析就會報錯,說這個屬性定義錯誤,也是崩潰。。。好在查找資料有這個解決辦法,就是使用int?來定義,其它類型float?、long?都可以這么來定義,這樣就可以解決這個問題了。
10.webgl+nginx搭建簡單服務
打包出來的webgl有些瀏覽器是不支持直接打開的,Google和火狐瀏覽器就不能直接打開,所以需要搭建簡單的服務器來打開webgl網頁,下面一篇文章很好的解決這一問題unity webgl + nginx服務器 You can reduce your startup time if you configure your web server to host
11.webgl解決模型鋸齒問題
模型鋸齒問題unity自身的解決方案是:Project Settings->Quality->Anti Aliasing 選擇8x Multi Sampling,Quality 記得選中webgl平台下你設置好的選項。當然還有一些插件都會有抗鋸齒的優化,比如PostProcessing后期處理特效的插件,有興趣可以試試。
12.webgl調式
相信開發webgl項目的朋友應該都知道,在編輯器下編寫能正常運行,但是呢導出webgl一運行就會發現各種錯誤,恨不得unity出一個在網頁上測試使用的編輯器,配合VS一段代碼進行調式,但是這是不可能的,所以就盡量使用debug來定位錯誤吧,小編也是被折磨的不行,因為某些功能只能在特定機器上部署測試,這使我代碼出錯了只能寫debug來定位了,所以多寫一點,因為導出包不易啊!一次打包10分鍾,想要很好的測試哪段代碼出問題就得看debug了,記得勾選ProjectSettings->Player->Enable Exceptions為Explicitly Thrown Exceptions Only,不然在瀏覽器控制台就看不到debug了,最后正式上線記得關掉。
13.webgl性能優化
當你滿懷欣喜的打開你的項目,發現你的項目就像播放PTT一樣,那就的做優化了,優化有:
1.減少模型的片面數和頂點數(盡量不使用球和圓柱體這兩個片面數太多了);
2.使用靜態合批,勾選Project Settings->Player->Other Settings->Static Batching,相應的物體Static需要勾選Batching Static;
3.使用動態合批,勾選Project Settings->Player->Other Settings->Dynamic Batching,相應的物體Static需要勾選Batching Static;
4.貼圖如果模糊的話,去掉勾選Generate mip map,盡量將MaxSize減少;
5.去掉陰影,使用光照貼圖;
6.如果模型的材質不需要受到光照影響,盡量使用Mobile/Diffuse或者Unlit/Texture;
7.盡量刪除碰撞體;
8.刪除沒有用的Animator(有些模型導入會有);
9.盡量少使用Animator,簡單的動畫使用Dotween或者使用Animation,繁瑣的、多狀態才使用Animator;
10.刪除網格碰撞,盡量不使用網格碰撞;
11.使用光照烘焙,使用Reflection Probe和Light Probe Group,屬性設置完成后,將需要受光照影響的模型放置里面,在lighting面板點擊bake即可(物體刪除都可以,數據已經存在Scene數據里了);
12.使用遮擋剔除,物體放置在Occlusion Area,static勾選Occluder static和Occludee static,在Occlusion面板進行bake即可(物體刪除都可以,數據已經存在Scene數據里了);
13.開始運行時盡量少使用new;
14.使用LOD(這個不太推薦使用,只有內存充足下使用,一般webgl內存都是吃緊的,搞不好就是內存超出)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM