400-650-7353
您所在的位置:首頁 > IT干貨資料 > unity > 【Unity基礎(chǔ)知識】大型游戲中UI優(yōu)化原則匯總(下)

【Unity基礎(chǔ)知識】大型游戲中UI優(yōu)化原則匯總(下)

  • 來源:Unity干貨資料
  • 2020-08-03 21:56:04
  • 閱讀()
  • 分享
  • 手機(jī)端入口

四、動靜分離

動靜分離就是說同一個界面下的UI,可活動的元素(血條,藍(lán)條,傷害數(shù)字,CD)放在一個Canvas下,不可活動的元素(人物頭像,商城,和平,抽獎等按鈕)放在另一個Canvas下。雖然兩個Canvas打斷了合批,但是卻減少了網(wǎng)格的重建時間,總體上是有優(yōu)化的。

為什么要避免網(wǎng)格重建那? 如果重建的網(wǎng)格過大,就會很卡。比多一個drawcall還卡。

假如同一個Canvas里面有100個Image,Canvas將會把100個單獨的Mesh合并成一個大的ShareMesh,用于渲染。

如果剛好這100個Image都是使用了相同的圖片或者是同一個圖集里面的圖片,那么由于使用的Mesh只有一個(ShareMesh),假如UI元素非常多,ShareMesh可能有2M大小(這是一個比較極端的例子,實際上一般的ShareMesh都是幾百K,出現(xiàn)這么大的ShareMesh本身就需要注意了),材質(zhì)球都是同一個(內(nèi)置的默認(rèn)材質(zhì)球),貼圖也是同一張,所以得到的結(jié)果就是,DrawCall只有一個。

如果這個100個Image是不會動的,合并ShareMesh沒有太大的問題

但是如果是上面的血條,藍(lán)條,名字板,CD,文字聊天信息這些需要動的UI元素和其他UI元素合并同一個ShareMesh的,那么問題就來了,血條由長變短,頂點發(fā)生了改變,導(dǎo)致2M的整體ShareMesh也需要重新的生成頂點信息,并且整個ShareMesh重新渲染,這明顯是得不償失的。

當(dāng)然動態(tài)的UI還包括文字部分,其中Text是UGUI產(chǎn)生頂點數(shù)量的重災(zāi)區(qū),一個字符產(chǎn)生4個頂點,如果再加上Shadow則相當(dāng)于又把Text復(fù)制了一遍產(chǎn)生8個,

Outline則會將Text復(fù)制4遍產(chǎn)生20個頂點。所以Shadow、Outline不但會產(chǎn)生額外的OverDraw外還會產(chǎn)生過多的頂點數(shù),

一定慎用,確實需要請選擇用圖片背景替代,其次選擇相對較省的Shadow。

五、動態(tài)圖集

所謂動態(tài)圖集,就是圖集是在游戲運(yùn)行過程中生成的,而不是在游戲制作階段生成的。程序生成一張或n張較大的Texture圖集(根據(jù)項目需求,可以設(shè)置Texture大小為1024*1024或2048*2048等等),Image加載進(jìn)來的Texture不直接使用,而是將Texture信息按照一定規(guī)則和排列拷貝到這張Texture上,以達(dá)到n個Image共用一張Texture,合并Draw Call的目的,同時Image銷毀不用之后,Texture信息從大的Texture圖集中移除,達(dá)到圖集空間重復(fù)利用的目的。

什么時候需要打動態(tài)圖集那?

我們先來看看靜態(tài)圖集的缺點:

1、如果某個界面只需要出現(xiàn)一個圖集中包含的小圖標(biāo)(比如掉了一個物品,學(xué)會某種技能),這個小圖片是包含在一個大的靜態(tài)圖集里的,那為了顯示一個很小的圖標(biāo),就得加載一個很大的圖集,從而導(dǎo)致打開該界面很慢(由于加載大的圖集)。

并且后期熱更新的時候,如果修改或者添加一張圖片資源,那么就意味著要更新整個圖集的資源。

2、那打成多靜態(tài)個圖集那?這樣只有一個圖標(biāo)的界面沒問題了。有多個圖標(biāo)出現(xiàn)的界面就有問題了,加載的也多,drawcall也多,并且為了合并Draw Call不被打斷,要小心地設(shè)置UI的層級,避免ABA問題造成合批被打斷,操作復(fù)雜度就提高了。


物品圖標(biāo)打了多個圖集

一個界面顯示多種物品圖標(biāo)

下面demo只是簡單的演示一下動態(tài)圖集的主要思路,圖片分配算法也只是將大圖片分成64x64的一個一個分區(qū),每個分區(qū)采用引用計數(shù)開控制是否在使用圖片,用于維護(hù)整個UI系統(tǒng)的話,這種算法并不適用,但是如果只是用于icon圖標(biāo)的話,由于icon圖標(biāo)是固定尺寸的,所以這套算法就很合適了。

動態(tài)圖集的缺點:當(dāng)然動態(tài)圖集也是有缺點的

1、動態(tài)圖集因為將圖集的生成過程延遲到了游戲運(yùn)行時,所以必然會比靜態(tài)圖集多了圖集生成的成本,當(dāng)然這也是可以優(yōu)化的。

2、并且在目前的動態(tài)圖集生成方案中,還沒有出現(xiàn)公開的支持壓縮的動態(tài)圖集解決方案。

3、還有一點,靜態(tài)圖集由于圖片在生成過程中是確定的,可以將分配算法做得很好,圖集的利用率也能做到很高。動態(tài)圖集由于圖片是動態(tài)生成的,在游戲運(yùn)行過程中也會動態(tài)的增減圖片,類似操作系統(tǒng)的內(nèi)存分配算法,圖集必然會出現(xiàn)碎片,圖集的利用率也不可能做得很高

總之, 如果能把以上五個方面都做到了,那么UI的優(yōu)化就不成問題。當(dāng)然有的項目不需要都做到,做到其中幾部分就可以了。也有的項目需要做的比 上面的還多。這都得具體問題具體分析,如果游戲中3D場景,人物,特效部分優(yōu)化做的好,那么UI的壓力就小點,如果3D部分優(yōu)化的不好,那么UI的壓力就大點,需要優(yōu)化的東西就多些。

文章“【Unity基礎(chǔ)知識】大型游戲中UI優(yōu)化原則匯總(下)”已幫助

>>本文地址:http://hqfphsz.com/zhuanye/2020/51130.html

THE END  

聲明:本站稿件版權(quán)均屬中公教育優(yōu)就業(yè)所有,未經(jīng)許可不得擅自轉(zhuǎn)載。

1 您的年齡

2 您的學(xué)歷

3 您更想做哪個方向的工作?

獲取測試結(jié)果
  • 大前端大前端
  • 大數(shù)據(jù)大數(shù)據(jù)
  • 互聯(lián)網(wǎng)營銷互聯(lián)網(wǎng)營銷
  • JavaJava
  • Linux云計算Linux
  • Python+人工智能Python
  • 嵌入式物聯(lián)網(wǎng)嵌入式
  • 全域電商運(yùn)營全域電商運(yùn)營
  • 軟件測試軟件測試
  • 室內(nèi)設(shè)計室內(nèi)設(shè)計
  • 平面設(shè)計平面設(shè)計
  • 電商設(shè)計電商設(shè)計
  • 網(wǎng)頁設(shè)計網(wǎng)頁設(shè)計
  • 全鏈路UI/UE設(shè)計UI設(shè)計
  • VR/AR游戲開發(fā)VR/AR
  • 網(wǎng)絡(luò)安全網(wǎng)絡(luò)安全
  • 新媒體與短視頻運(yùn)營新媒體
  • 直播帶貨直播帶貨
  • 智能機(jī)器人軟件開發(fā)智能機(jī)器人
 

快速通道fast track

近期開班時間TIME