Unity3D_NGUI_安卓APK安装包瘦身实践
減包瘦身是個精細活。本文整理了0907版本操作過程,以備日后參考。
?
經過一番折騰,各位攻城獅的努力,美術設計師的支持,策劃爺的理解,UI資源(圖集、字體、單局外模型貼圖)從45.4MB減少到24.5MB。如下表所示。
?
下文看圖說話。實操中針對同一個資源,可組合應用多個壓縮選項。文中所指【圖集Atlas】是多個小圖片的合集,【Texture】是單張圖片,大小指的都是打包前的資源大小。
?
1、???刪除無效的、廢棄的資源
理由是顯然的,無效的、廢棄的資源就應該移除項目工程之外。確認是否廢棄資源可以通過以下幾個方面考量:
Texture:(1)在prefab中搜索texture.png.meta文件的guid,確認是否被引用;(2)在C#代碼中搜索文件名,確認是否被動態指定。
圖集Atlas:(1)在prefab中搜索atlas.prefab.meta文件的guid,確認是否被引用。
圖集Atlas的單個圖片:(1)在prefab中搜索圖片文件名,確認是否被直接引用;(2)在C#代碼中搜索圖片完整或局部文件名,確認是否被動態指定。
?
2、???取消圖集Atlas的正方形限制
工程項目中提供了圖集制作工具(HDAtlasMaker),默認是生成正方形圖集Atlas。然而此舉很浪費,因為若限制圖集為正方形,很多時候圖集大部分區域是空白。事實上應取消正方形限制。
例子(無損):寬*高:2048*2048(16M) =>?1024*2048(8M)
適用場合:去掉正方形限制后可縮減一個尺寸的Atlas。
?
3、???使用TexturePackerGUI打包,勾選Trim屬性去除透明邊界
例子(無損):寬*高:512*1024(2M) => 512*512(1M)
適用場合:去掉透明邊界后可縮減一個尺寸的Atlas。
使用TexturePackerGUI工具制作圖集時,可以預覽圖集效果。勾選Trim屬性的實質是,圖集打包時設置Padding屬性代替透明邊界。
?
4、???調整Texture初始默認導入設置
Texture的默認導入設置包含Mip Maps。然而Mip Maps是為了物體在視野遠近不同而生成不同分辨率的紋理。而UI貼圖不需要考慮遠近,無需生成小紋理。所以應將Texture導入設置改用Advanced,并取消Generate Mip Maps。
無損:1.3M => 1.0M
適用場合:默認導入設置為Texture的全部UI圖片資源。
?
5、???調整Texture導入設置(Advanced:無Alpha透明通道)
(1)????????????無損:RGBA?32 Bits(2.3MB) => RGB?24 Bits(1.7MB)
適用場合:無Alpha透明通道的單個圖片,如登陸背景、通用背景。
(2)????????????有損:RGB?24 Bits(1.7MB) => RGB?ETC 4Bits(256KB)
此項壓縮有損畫質,然而壓縮效果卻很明顯。注意ETC需設置資源寬高為2冪次方。實際尺寸非2冪次方時,將以伸縮處理。
適用場合:無Alpha透明通道,且畫質要求較低的單個圖片,如:結算背景、領獎背景、通用背景、Loading圖、3D模型貼圖等。
(3)????????????有損:RGB ETC 4Bits &?Max 1024(256KB) => RGB ETC 4Bits &?Max 512(64KB)
在(2)的基礎上,此處設置寬高最大512,當實際尺寸超過512時將拉伸到實際尺寸,會進一步模糊畫質。此處512也可根據實際情況選用256、128、64、32等。
適用場合:同(2),無Alpha透明通道,且畫質要求更低的單個圖片。
?
6、???調整Texture導入設置(Advanced:有Alpha透明通道)
(1)????????????有損:RGBA?32 Bits(1.1MB) => RGBA?16 Bits(0.5MB)
適用場合:有Alpha透明通道,且畫質要求較低的單個圖片。
(2)????????????有損:RGBA 16 Bits &?Max 1024(0.5MB) => RGBA 16 Bits &?Max 512(360KB)
適用場合:同(2),有Alpha透明通道,且畫質要求更低的單個圖片。畫質在(2)的基礎上進一步模糊。
?
7、???Texture從Atlas分離出來
例子(幾乎無損):寬高:512*512(1M) =>?256*512(0.5M)+ RGBA?16Bits(50KB)
適用場合:分離出尺寸最大的單個圖片后,剩下小圖片生成的圖集Atlas能縮小一個尺寸。
?
8、???去掉邊緣發光
例子(幾乎無損):寬高:640*326(0.8M) => 234*126(115KB)
適用場合:邊緣發光去掉后對畫質不影響或影響甚微的單個圖片。
?
9、???去掉邊緣裝飾
例子(幾乎無損):寬高:585*141(322KB) => 510*79(157KB)
適用場合:邊緣裝飾去掉后對畫質不影響或影響甚微的單個圖片。
?
10、??????????????整合圖集Atlas
例子(幾乎無損):兩個256*512(0.5M*2) =>?一個256*512(0.5M)+若干獨立小圖
適用場合:圖集小圖片有交集,所屬模塊類似,且都有剩余空間,放一起剛剛好。
?
11、??????????????重新裁切透明邊框尺寸(Atlas)
例子(幾乎無損):512*512(0.5M) => 512*256(256KB)
適用場合: NGUI Font。由于UI Font不能直接Trim,需處理原始資源,切掉透明邊框。
?
12、??????????????重新裁切透明邊框尺寸(Texture)
例子(無損):640*499(0.6M) => 640*450(0.5M)
適用場景:有透明邊框的Texture。由于Texture不能直接Trim,需處理原始資源,切掉透明邊框。
?
13、??????????????縮小資源原始尺寸(Atlas)
例子(有損):寬*高:1024*2048(8M) => 1024*1024(4M)
適用場景:圖集Atlas空白太多,且圖集元素能接受小范圍的畫質模糊。
將小圖片縮小80%,重新制作圖集,實際應用UISprite時再通過代碼恢復125%回到原始尺寸。
?
14、??????????????縮小資源原始尺寸(Texture)
例子(有損):寬*高:577*1024(1.7M)vs 480*852(1.2M)vs 288*512(432KB)
適用場景:登陸界面背景原始尺寸640*1136。
若直接導入原尺寸,則資源較大(2.1M)。
若按Max 1024導入也不小(1.7M)。
若按Max 512導入則只需432KB,然而此圖為重要門面背景,畫質不能忍。又因為導入設置不支持512~1024的中間尺寸,唯有手動縮小原始尺寸到合適尺寸和畫質,比如此處中間版本【原圖66.6% = 480*852(1.2M)】。
?
15、??????????????調整策劃需求
例子(無損):640*630(1.2M) => 32*32(3KB)
適用場景:特定需求,特定應用場景。
項目中的具體需求是,特定時間區間內顯示運營Loading圖,其他時間顯示默認Loading圖。這里可以讓運營策劃調整該特定時間區間,使之包含整個測試期間,那么默認Loading圖就無需顯示,其導入尺寸可縮小到最小。此處不直接刪除默認Loading圖是為了避免邏輯出錯,且方便日后恢復。
?
16、??????????????統一背景資源
例子:背景大圖。
背景大圖等資源應盡量復用。以下曾經出現過的幾個背景圖差異微小,經商討后,最終統一用第三個,刪除另外兩個。
?
17、??????????????縮減關鍵圖集Atlas尺寸
例子:Common圖集Atlas把ABCS品質獨立出來,剩下打包更小尺寸的Atlas。關鍵圖集出現概率很高,此處縮減操作是為內存考慮。
?
18、??????????????分析構建日志
例子:分析C:\Users\[你的用戶名]\AppData\Local\Unity\Editor\Editor.log當中的構建日志部分,查看打包資源列表,發現:
(1)NGUI樣例圖集被打包進去了。
搜索發現并無被直接引用,而是間接引用。為防止出錯不直接刪除,而是將Max Size調整到很小。
(2)發現了重復圖集。
(3)寵物圖集占用5.3MB,而不是4.0MB,經檢查發現導入設置有誤,生成了Mip Maps。類似的大圖集有好幾個,逐一檢查處理。
(4)新手引導和頭像集合這兩個圖集很大,進一步將重點優化。
總結
以上是生活随笔為你收集整理的Unity3D_NGUI_安卓APK安装包瘦身实践的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 浦发银行信用卡激活有效期是多久?不激活有
- 下一篇: 兴业银行信用卡制卡中怎么查额度?90%的