譯官方文檔: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
須要這麼作的目的和好處就很少說了。
第一步要作的就是:看看哪些文件是最佔空間的,那麼它們就是首選優化對象了。
你能夠在剛剛完成一次build以後在「Editor Log」中找到這些信息。
如何打開Editor Log:
在Mac上看起來就是這樣的了:
能夠看出這份log提供了一份資源總括:各類類型資源的總大小,以及所佔百分比。同時還降序列出了單個文件的大小。
順帶一提,資源類型中的「File headers」它們並非資源自己,而是加在原始資源上,用來存儲「引用」與「配置信息」的額外數據。一般能夠忽略這些數據的大小,但若是在你的「Resources」文件夾裏有着十分龐大的資源文件的話,這些數據也可能會很大。。
這份log能夠幫助你鑑定哪些文件是你或許想要刪掉或者進行優化的。
不過在開工以前,還須要先了解幾點:
一、Unity再編碼會把資源導成它本身的內部格式,因此資源源文件的類型是不相干的。好比你有一個多圖層的PS紋理,那麼在build以前它就會被拼接、壓縮。因此刻意把這份紋理轉成PNG格式其實對減小包大小並無幫助。在開發時仍是用最方便的格式就行了。
二、Unity會在build時去掉那些你的項目中沒有使用到的資源,因此不須要咱們手動找出來刪掉了。可是腳本是不會被刪掉的(不過它們不佔資源),還有「Resources」文件夾裏的所有資源,也是不會自動幫你刪除的(由於Unity沒法判斷這裏面哪些是須要用到的)。因此咱們要確保「Resources」文件夾裏的都是咱們真正要用到的。固然,你還能夠經過動態加載AssetBundles的方式來代替「Resources」文件夾裏的資源,以減小包大小。
一些建議:
紋理(Textures)
紋理一般會佔據大部分空間。第一步要作的就是選用經壓縮的紋理格式(DXT 或者 PVRTC)。若是這樣沒有減小它的所佔用空間,那麼試試縮小紋理的尺寸吧。你不須要對資源自己進行修改,只要在 Project 下選中紋理,而後在 Inspectpr 下設置Max Size就好了。
有一個好辦法就是:在場景中找到使用了該紋理的object,放大畫面,而後一邊下降 Max Size ,一邊看場景中的object,直到它看起來比較糟糕,就能夠知道怎樣是最合適的了。。
由以上幾張圖對比來看,咱們就能發現,選擇512甚至256的Max Size,效果都是能夠的,並且資源大小也能有顯著的減小。修改紋理的Max Size並不會影響到資源自己,只是改變了它在遊戲裏的分辨率。下表列出了不一樣圖片格式所佔用空間的大小(單位bpp:字節/像素)
一張圖片的大小計算公式:width * height * bpp,若是你使用的是mipmap貼圖,那麼其大小將是普通圖片的3倍左右。
Unity默認在導入紋理時就會進行壓縮,爲了在開發時節約時間,咱們能夠在偏好設置裏手動關掉此功能
而在build時,Unity無論你有沒有勾選這一項,都會對紋理進行壓縮。
網格與動畫(Meshes and Animations)
網格與導入的動畫(Animation Clips)均可以被壓縮。在選中一個模型以後,就能夠在Inspector中進行設置了。
不過對它們進行壓縮,是可能形成偏差的。因此最好先弄清楚什麼程度的壓縮是可接受範圍內的。另外,mesh的壓縮僅僅是減小數據文件的大小,並不會減小運行時的內存消耗。而減小動畫關鍵幀,則會讓二者都有所減小,通常狀況下咱們都應該開啓。
動態連接庫(DLLs)
默認狀況下,Unity只會在build時包含如下dll:
咱們應該避免對 System.dll 或者 System.Xml.dll 有所引用,不然仍是會在build時包含進來,而它們也會佔用數M的空間。
若是在遊戲中確實須要解析XML,那麼可使用「Mono.Xml.zip」來代替系統級的dll。此外,大多數泛型容器都已經包含在標準庫中,只有少數幾個在System.dll裏,因此可能的話,也應該避免使用到它。
減小手機上使用的 .NET 庫的大小
Unity爲移動設備提供了兩套 .NET 的API:.NET 2.0 和.NET 2.0 Subset
.NET 2.0 提供了幾乎整套的API功能,可是不少時候遊戲都用不上那麼多,致使大量多餘的代碼佔用了寶貴的空間資源。爲了不浪費,咱們就能夠用Unity提供的 .NET 2.0 Subset(至關於.NET 2.0的一個子集)。爲節省資源,這裏面不少通常用不到的例程庫都被移除了,因此這一優化也會是頗有用的,只是須要確保咱們的代碼可以正常工做。
可在「Player Settings」中進行設置
php