工欲善其事必先利其器先改,這些好工具可以有大幫助蜻底,Unity內(nèi)集成的Profiler(因為是集成在Unity中可能會被本身數(shù)據(jù)干擾橘洞,特別是編輯器模式運行)和Memory Profile总寒。針對平臺的有iOS->Instruments灭必,Android->VTune和Snapdragon profiler。
從內(nèi)存角度來說:降低render txture的尺寸掸刊。通過AssetPostProcessor修改資源的導(dǎo)入配置免糕,常用的如下幾項:
1) 相對鏡頭位置固定的圖片不需要 mipmap
2) 圖片的Read/Write要關(guān)閉。模型的mesh在導(dǎo)入時也是自動開啟的忧侧,生成mesh collider要用到這個石窑,如果不用生成mesh collider。也就可以關(guān)閉掉蚓炬。
3) 壓縮圖片大小松逊。UI圖集紋理大小1024*1024或2048*2048,模型貼圖512*512
4)如果模型沒用character動畫就可以取消勾選rig肯夏。(disable rig on no-character model)
5)對于共用蒙皮綁定的角色经宏,可以復(fù)用avatar。(copy avatars for characters with shared rigs)
6)開啟mesh壓縮驯击。
在代碼中創(chuàng)建mesh renderer時默認(rèn)cast/receive shadow是開啟的烁兰,light/reflection probe也是開啟的。如果不需要關(guān)閉它們徊都。
音頻文件:iOS平臺使用mp3,Android平臺使用Vorbis沪斟。游戲中使用單聲道Mono. 聲音的比特率也盡量低。
盡量重用Collection(List和Hashset, Dictionary)
避免直接字符串拼接和閉包函數(shù)暇矫,匿名函數(shù)主之。
如果用枚舉Enum作為Dictionary的鍵值的話。枚舉值會轉(zhuǎn)化為對象Object李根。比較鍵值時是比較hashcode. 解決辦法是為Dictionary傳入一個實現(xiàn)IEqualityComparer的參數(shù)槽奕。
把文字處理成JSON字符串是非常慢的(內(nèi)部用到了反射)。解決辦法是:不需要動態(tài)改的數(shù)據(jù)序列化成對象房轿,把文字分塊處理只處理當(dāng)前需要的(分治)粤攒,使用多線程,Unity 5.3后用JsonUtility稍微好點冀续。
Resources目錄內(nèi)的東西盡量少琼讽,因為在啟動階段就要處理必峰。