?
貼圖:
l??控制貼圖大小,盡量不要超過?1024 x1024;
l??盡量使用2的n次冪大小的貼圖,否則GfxDriver里會有2份貼圖;
l??盡量使用壓縮格式減小貼圖大小;
l??若干種貼圖合并技術;
l??去除多余的alpha通道;
l??不同設備使用不同的紋理貼圖,分層顯示;
?
模型:
l??盡量控制模型的面數,小于1500會比較合適;
l??不同設備使用不同的模型面數;
l??盡量保持在30根骨骼內;
l??一個網格不要超過3個material;
?
動畫:
l??N種動畫壓縮方法;
l??盡量減少骨骼數量;
?
聲音:
l??采用壓縮MP3?和?wav;
?
資源方面的優化:
l??使用?Resource.Load?方法在需要的時候再讀取資源;
l??各種資源在使用完成后,盡快用Resource.UnloadAsset和UnloadUnusedAsset卸載掉;
l??靈活運用AssetBundle的Load和Unload方法動態加載資源,避免主要場景內的初始化內存占用過高;(實現起來真的很難…)
l??采用www加載了AssetBundle后,要用www.Dispose?及時釋放;
l??在關卡內謹慎使用DontDestroyOnLoad,被標注的資源會常駐內存;
?
代碼的優化:
l??盡量避免代碼中的任何字符串連接,因為這會給GC帶來太多垃圾;
l??用簡單的“for”循環代替“foreach”循環;
l??為所有游戲內的動態物體使用內存對象池,可以減少系統開銷和內存碎片,復用對象實例,構建自己的內存管理模式,減少Instantiate和Destory;
l??盡量不使用LINQ命令,因為它們一般會分配中間緩器,而這很容易生成垃圾內存;
l??將引用本地緩存到元件中會減少每次在一個游戲對象中使用 “GetComponent” 獲取一個元件引用的需求;
l??減少角色控制器移動命令的調用。移動角色控制器會同步發生,每次調用都會耗損較大的性能;
l??最小化碰撞檢測請求(例如ray casts和sphere checks),盡量從每次檢查中獲得更多信息;
l??AI邏輯通常會生成大量物理查詢,建議讓AI更新循環設置低于圖像更新循環,以減少CPU負荷;
l??要盡量減少Unity回調函數,哪怕是空函數也不要留著;(例如空的Update、FixedUpdate函數)
l??盡量少使用FindObjectsOfType函數,這個函數非常慢,盡量少用且一定不要在Update里調用;
l??千萬一定要控制mono堆內存的大小;
?
摘自《騰訊大咖說:騰訊是如何做Unity手游性能優化的》
原文地址:http://wetest.qq.com/lab/view/108.html