Unity3D培訓(xùn):MMORPG游戲優(yōu)化經(jīng)驗(yàn)分享(三)
來(lái)源:
奇酷教育 發(fā)表于:
奇酷教育-unity3D培訓(xùn)_unity3D游戲_unity3D教程
Unity3D培訓(xùn):MMORPG游戲優(yōu)化經(jīng)驗(yàn)分享(三),在優(yōu)化
Unity游戲時(shí),我們一般從四個(gè)方面:CPU、GPU、內(nèi)存、工程配置等入手,它們都可能是影響游戲性能瓶頸的關(guān)鍵。
每一個(gè)Mesh的壓縮選項(xiàng)、Read/Write選項(xiàng)都要根據(jù)Mesh使用方式進(jìn)行單獨(dú)設(shè)置,同時(shí)要做好當(dāng)Mesh存在雙份數(shù)據(jù)時(shí),CPU端數(shù)據(jù)的及時(shí)釋放。合理的減面也是必不可少的。
壓縮紋理的使用是毋庸置疑,而壓縮格式要根據(jù)項(xiàng)目的機(jī)型適配靈活選擇,保證質(zhì)量和體積都能滿(mǎn)足需要。當(dāng)編輯器中刷地形紋理時(shí),需要紋理開(kāi)啟Read/Write,而在打包時(shí)要關(guān)閉這個(gè)選項(xiàng)。
每個(gè)紋理的尺寸要根據(jù)它的用途、實(shí)際測(cè)試時(shí)內(nèi)存占用的情況,進(jìn)行合理的限制,不能隨意設(shè)定它。對(duì)于圖集需要最大限度利用面積,避免浪費(fèi)寶貴的內(nèi)存。另外當(dāng)紋理使用ETC2、ASTC格式時(shí),在不支持這些格式的設(shè)備上,壓縮紋理會(huì)被fallback為無(wú)壓縮的RGBA格式,不但增大了內(nèi)存占用,同時(shí)增加了fallback的CPU開(kāi)銷(xiāo)。
AnimationClip可以通過(guò)壓縮浮點(diǎn)數(shù)精度,剔除無(wú)用的scale曲線(xiàn)降低內(nèi)存占用。同時(shí)AnimationClip加載策略也對(duì)內(nèi)存占用有很大影響,全部預(yù)加載還是按需異步加載,需要根據(jù)項(xiàng)目實(shí)際情況決定。
Mono進(jìn)行內(nèi)存分配時(shí),在不同類(lèi)型的數(shù)據(jù)對(duì)象在內(nèi)存中是相鄰的存在內(nèi)存塊里,如果說(shuō)釋放了一個(gè)數(shù)組,它所占的內(nèi)存被釋放了。但是這個(gè)區(qū)域是不會(huì)還給系統(tǒng)內(nèi)存,依然保留著。接著又創(chuàng)建了新的對(duì)象,新對(duì)象的內(nèi)存大小比剛才被釋放的空間大,就無(wú)法直接放入這個(gè)空間,只能由Mono申請(qǐng)一份新的內(nèi)存來(lái)存放。當(dāng)Mono申請(qǐng)新內(nèi)存時(shí),Mono堆內(nèi)存一般會(huì)擴(kuò)大很大一部分,如見(jiàn)下圖05所示。
在使用數(shù)組類(lèi)型的對(duì)象時(shí),如果初始化時(shí)時(shí)非定長(zhǎng)數(shù)組,數(shù)組實(shí)際容量會(huì)根據(jù)Add操作以0、4、8、16、32倍逐步擴(kuò)大,其中大量空間為Null,浪費(fèi)了內(nèi)存。這種情況常出現(xiàn)在客戶(hù)端初始化數(shù)據(jù)表保存到List、Dictionary時(shí)。
當(dāng)我們需要手動(dòng)釋放一些對(duì)象的內(nèi)存時(shí),會(huì)有很多種方式,Unity提供了很多卸載各種資源的函數(shù)。主動(dòng)調(diào)GC.collect是不必要的,如果一個(gè)對(duì)象的引用不是Null時(shí),是不可能釋放它的。GC只需要做好對(duì)象引用的清理就可以,剩下的還是由GC機(jī)制自動(dòng)管理更好。我們可以通過(guò)自定義內(nèi)存池和資源管理器,來(lái)很精細(xì)的控制每一種資源的生命周期。
AssetBundle壓縮格式一般使用LZ4,但要注意AssetBundle的合理Unload時(shí)機(jī)。而LZMA格式,由于存在加載時(shí)解壓后重壓縮為L(zhǎng)Z4的開(kāi)銷(xiāo),一般情況下不建議使用。主Bundle卸載時(shí),與它關(guān)聯(lián)的依賴(lài)Bundle一定要根據(jù)引用計(jì)數(shù)來(lái)控制是否可以卸載,否則依賴(lài)Bundle的Asset容易引發(fā)內(nèi)存泄露。
IL2CPP在安卓系統(tǒng)使用時(shí),要注意libil2coo.so的文件大小。在安卓系統(tǒng)中,so會(huì)在游戲啟動(dòng)后直接加載在內(nèi)存中,它的內(nèi)存占用大小基本上和文件大小差不多。所以so的尺寸要有所控制,否則會(huì)影響整個(gè)游戲的內(nèi)存數(shù)值。所以,使用il2cpp時(shí)要注意值類(lèi)型的泛型、重復(fù)代碼等容易增大il2cpp的cpp代碼體積的情況。
以上就是
奇酷為大家分享的“Unity3D培訓(xùn):MMORPG游戲優(yōu)化經(jīng)驗(yàn)分享(三)”謝謝大家觀看,如果對(duì)unity3D感興趣的話(huà),想學(xué)
unity3D培訓(xùn)的,也可以在線(xiàn)咨詢(xún),我們將竭誠(chéng)為你解答。