[Unity優(yōu)化] Unity3D如何減少安裝包大小

譯官方文檔:http://docs.unity3d.com/Manual/ReducingFilesize.html

PDF文檔:http://www.rukawa.cn/Uploads/Attachment/ReducingFilesize/ReducingFilesize.pdf

原文地址:http://www.rukawa.cn/index.php?s=/home/article/detail/id/27.html

需要這么做的目的和好處就不多說了。

第一步要做的就是:看看哪些文件是最占空間的,那么它們就是首選優(yōu)化對(duì)象了。

你可以在剛剛完成一次build之后在“Editor Log”中找到這些信息。

如何打開Editor Log:


在Mac上看起來就是這樣的了:


可以看出這份log提供了一份資源總括:各種類型資源的總大小,以及所占百分比。同時(shí)還降序列出了單個(gè)文件的大小。

順帶一提,資源類型中的“File headers”它們并不是資源本身,而是加在原始資源上,用來存儲(chǔ)“引用”與“配置信息”的額外數(shù)據(jù)。通??梢院雎赃@些數(shù)據(jù)的大小,但如果在你的“Resources”文件夾里有著十分龐大的資源文件的話,這些數(shù)據(jù)也可能會(huì)很大。。

這份log可以幫助你鑒定哪些文件是你或許想要?jiǎng)h掉或者進(jìn)行優(yōu)化的。

不過在開工之前,還需要先了解幾點(diǎn):

1、Unity再編碼會(huì)把資源導(dǎo)成它自己的內(nèi)部格式,所以資源源文件的類型是不相干的。比如你有一個(gè)多圖層的PS紋理,那么在build之前它就會(huì)被拼接、壓縮。所以刻意把這份紋理轉(zhuǎn)成PNG格式其實(shí)對(duì)減少包大小并沒有幫助。在開發(fā)時(shí)還是用最方便的格式就好了。

2、Unity會(huì)在build時(shí)去掉那些你的項(xiàng)目中沒有使用到的資源,所以不需要我們手動(dòng)找出來刪掉了。但是腳本是不會(huì)被刪掉的(不過它們不占資源),還有“Resources”文件夾里的全部資源,也是不會(huì)自動(dòng)幫你刪除的(因?yàn)閁nity無法判斷這里面哪些是需要用到的)。所以我們要確?!癛esources”文件夾里的都是我們真正要用到的。當(dāng)然,你還可以通過動(dòng)態(tài)加載AssetBundles的方式來代替“Resources”文件夾里的資源,以減少包大小。

一些建議:

紋理(Textures)

紋理通常會(huì)占據(jù)大部分空間。第一步要做的就是選用經(jīng)壓縮的紋理格式(DXT 或者 PVRTC)。如果這樣沒有減少它的所占用空間,那么試試縮小紋理的尺寸吧。你不需要對(duì)資源本身進(jìn)行修改,只要在 Project 下選中紋理,然后在 Inspectpr 下設(shè)置Max Size就行了。


有一個(gè)好辦法就是:在場(chǎng)景中找到使用了該紋理的object,放大畫面,然后一邊降低 Max Size ,一邊看場(chǎng)景中的object,直到它看起來比較糟糕,就可以知道怎樣是最合適的了。。










由以上幾張圖對(duì)比來看,我們就能發(fā)現(xiàn),選擇512甚至256的Max Size,效果都是可以的,而且資源大小也能有顯著的減少。修改紋理的Max Size并不會(huì)影響到資源本身,只是改變了它在游戲里的分辨率。下表列出了不同圖片格式所占用空間的大?。▎挝籦pp:字節(jié)/像素)


一張圖片的大小計(jì)算公式:width * height * bpp,如果你使用的是mipmap貼圖,那么其大小將是普通圖片的3倍左右。

Unity默認(rèn)在導(dǎo)入紋理時(shí)就會(huì)進(jìn)行壓縮,為了在開發(fā)時(shí)節(jié)約時(shí)間,我們可以在偏好設(shè)置里手動(dòng)關(guān)掉此功能


而在build時(shí),Unity不管你有沒有勾選這一項(xiàng),都會(huì)對(duì)紋理進(jìn)行壓縮。

網(wǎng)格與動(dòng)畫(Meshes and Animations)

網(wǎng)格與導(dǎo)入的動(dòng)畫(Animation Clips)都可以被壓縮。在選中一個(gè)模型之后,就可以在Inspector中進(jìn)行設(shè)置了。


不過對(duì)它們進(jìn)行壓縮,是可能造成誤差的。所以最好先弄清楚什么程度的壓縮是可接受范圍內(nèi)的。另外,mesh的壓縮僅僅是減少數(shù)據(jù)文件的大小,并不會(huì)減少運(yùn)行時(shí)的內(nèi)存消耗。而減少動(dòng)畫關(guān)鍵幀,則會(huì)讓兩者都有所減少,一般情況下我們都應(yīng)該開啟。


動(dòng)態(tài)鏈接庫(DLLs)

默認(rèn)情況下,Unity只會(huì)在build時(shí)包含以下dll:


我們應(yīng)該避免對(duì) System.dll 或者 System.Xml.dll 有所引用,否則還是會(huì)在build時(shí)包含進(jìn)來,而它們也會(huì)占用數(shù)M的空間。

如果在游戲中確實(shí)需要解析XML,那么可以使用“Mono.Xml.zip”來代替系統(tǒng)級(jí)的dll。此外,大多數(shù)泛型容器都已經(jīng)包含在標(biāo)準(zhǔn)庫中,只有少數(shù)幾個(gè)在System.dll里,所以可能的話,也應(yīng)該避免使用到它。

減少手機(jī)上使用的 .NET 庫的大小

Unity為移動(dòng)設(shè)備提供了兩套 .NET 的API:.NET 2.0 和.NET 2.0 Subset

.NET 2.0 提供了幾乎整套的API功能,但是很多時(shí)候游戲都用不上那么多,導(dǎo)致大量多余的代碼占用了寶貴的空間資源。為了避免浪費(fèi),我們就可以用Unity提供的 .NET 2.0 Subset(相當(dāng)于.NET 2.0的一個(gè)子集)。為節(jié)省資源,這里面很多一般用不到的例程庫都被移除了,所以這一優(yōu)化也會(huì)是很有用的,只是需要確保我們的代碼能夠正常工作。

可在“Player Settings”中進(jìn)行設(shè)置


移除無用的代碼

目前我們的項(xiàng)目比較適合使用Strip ByteCode選項(xiàng),并配合link.xml使用,link.xml放到項(xiàng)目的Assetes目錄下:


對(duì)于android平臺(tái),如果包實(shí)在太大,可以使用 Split Application Binary 功能

在Player Setting > Publishing Settings里,


關(guān)于Split Application Binaryhttp://www.ceeger.com/Manual/android-OBBsupport.html

?著作權(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),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • 本文原創(chuàng)版權(quán)歸 博客園吳秦所有,此處純粹技術(shù)收藏,如有再轉(zhuǎn),敬請(qǐng)于顯示位置標(biāo)明原創(chuàng)作者及出處,以示尊重??! 作者:...
    Magic_Dong閱讀 4,705評(píng)論 0 7
  • 這是一個(gè)關(guān)于Unity游戲包體優(yōu)化方案的全面介紹 打包規(guī)則 所有非editor下的托管代碼會(huì)編譯為dll,dll會(huì)...
    JervieQin閱讀 7,660評(píng)論 0 10
  • 構(gòu)建和運(yùn)行WebGL項(xiàng)目 當(dāng)您構(gòu)建(buil)WebGL項(xiàng)目時(shí),Unity將創(chuàng)建一個(gè)包含以下文件的文件夾: 一個(gè)i...
    tackor閱讀 4,517評(píng)論 0 2
  • unity 打包資源包含哪一些: 1. resources文件下被程序應(yīng)用的資源。優(yōu)化方案: ①對(duì)刪除被引用文件內(nèi)...
    hardac閱讀 771評(píng)論 0 5
  • 翻譯自官網(wǎng)文檔:https://unity3d.com/cn/learn/tutorials/topics/bes...
    su9257_海瀾閱讀 3,620評(píng)論 1 2

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