Unity3D打包中優化iOS包大小

2021-09-30 18:02:02 字數 2317 閱讀 3749

簡單理解就是:

先講下怎麼優化ios包可執行檔案的大小:

使用release版本打包最終發布包,並確保release模式下的optimization level為fastest, smallest [-os]

unity的build player setting中,把stripping level 改為 use micro mscorlib; stripping level 有三個等級選項:strip assemblies,strip bytecode 和 use micro mscorlib。strip assemblies 等級下,在aot編譯階段通過分析位元組碼將未被引用的類或者方法從dll中移除;strip bytecode 等級下,所有的.net dll將被剝離為元資料,因為所有**在aot階段已經預編譯並鏈結到主二進位制檔案中;use micro mscorlib 等級下,一些元件將從此庫中刪除,例如security、reflection.emit、remoting等,內部元件之間的相互依賴性也將最小化。此優化減少了主二進位制檔案和mscorlib.dll的大小,但它與某些system和system.xml程式集類不相容,因此請小心使用它。以上三種等級優化是相互累計疊加的,即等級2包含等級1,等級3包含等級2。

unity的build player setting中,當 scripting backend 選擇 il2cpp 時,勾選strip engine code

unity的build player setting中,把 api compatibility level 選擇 .net 2.0 subset;

unity的build player setting中,把 script call optimization level 選擇成 fast but no exceptions

刪除沒用或重複引用的第三方庫,或者使用輕量級的第三方庫代替原先引用庫,比如使用輕量級的json庫,如litjson;

刪除沒用**,比如一些第三方庫的example**,廢棄的系統**等,通過分析linkmap檔案可以得到mach-o可執行檔案中各個類或庫的大小(設定project->build settings->write link map file為yes,並設定path to link map file,build完後就可以在設定的路徑看到linkmap檔案了),使用這個工具可以檢測無用的oc類,使用這個工具可以得到各個類或庫的大小,然後著重優化相應的模組;

移除非必須使用的.net基礎庫,使用其它更精簡的庫代替,如system.xml可以用xmlparser或securityparser替代(可減少3-5m),system.linq也盡量不用,其一是容量問題,其二是效率問題,其三是在iphone4s下面可能導致crash的問題。

分離**和資源,將資源(如長字串,**等)從**中剝離並將它們放在外部檔案中,因為外部檔案的壓縮效率比將資料編譯為二進位制檔案時要高;

提公升ios的版本,移除不支援的指令集,如不支援armv7則不選擇。

根據unity官方文件描述,乙個空unity專案,如果沒有開啟包大小優化大概是22m,開啟上述優化之後大概是12m,還是有比較大的優化效果的。

剔除沒有使用的,對於重複使用的新建公共圖集;

使用8bit的png代替32bit的png或者pvrtc;這一步可以省下很大的包大小,因為遊戲中很多資源都是32bit的png格式,而一張壓縮後可以省下1/4的空間。但是也不是所有的png都能壓縮成8bit格式,8bit的png只有256種不同的顏色,對於**細節要求很高的就不能使用。png壓縮可以考慮pngquant這一開源工具,可以使用命令列實現一鍵打包壓縮。

壓縮音效資源,可以使用 ***格式壓縮,這格式目前在android和ios上都可以支援,不然還需要處理不同平台的音訊轉換;

優化mes**件,使得單個模型片面數<3000,材質數<3,骨骼數<50。

選擇「export for specific devices」,在下拉列表中選擇「all compatible device variants」;

選擇「rebuild from bitcode」。

參考:unity引擎ios執行檔大小優化

ipa包大小之linkmap檔案分析

關於ios的ipa包的分析之link map 檔案的分析

Unity3D 效能優化

unity3d 效能優化 一 程式方面 01 務必刪除指令碼中為空或不需要的預設方法 02 只在乙個指令碼中使用ongui方法 03 避免在ongui中對變數 方法進行更新 賦值,輸出變數建議在update內 04 同一指令碼中頻繁使用的變數建議宣告其為全域性變數,指令碼之間頻繁呼叫的變數或方法建議...

Unity 3D 優化記憶體

什麼是mipmap?mipmap旨在有效降低渲染頻寬的壓力,提公升遊戲的渲染效率。但是,開啟mipmap會將紋理記憶體提公升1.33倍。對於具有較大縱深感的3d遊戲來說,3d場景模型和角色我們一般是建議開啟mipmap功能的,但是在我們的測評專案中,經常會發現部分ui紋理也開啟了mipmap功能。這...

unity3D使用dll打包

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!unity中有些時候有些 是一整套的,如果能把他們歸類起來作為乙個檔案整個 結構看起來就會整潔清爽很多。c 提供了dll打包,但是unity中由於涉及到unity的自身dll,如unityengine.dll,我們一般寫的很多 都會涉及到對這個dl...