1. 程式人生 > >【Unity】Unity優化總結

【Unity】Unity優化總結


優化概括的說可以分為:CPU,GPU,記憶體;

開發上的細節可以分為:資源,引擎,程式碼,著色器;

1.資源方面;         》動態物體;遊戲主角、怪物、NPC等;                    控制面片數量 300 - 2000面片;                    控制Skinned Mesh Render 為1個;                    控制材質數量 1-3個;                    控制骨骼數量 小於30根;         》靜態物體;                     控制網格頂點數 少於500個;                     標記為Static batching;
                    Animation元件: 如果不需要,儘量不要附加;                     自帶地形資源: 控制地形的解析度 地形高度圖尺寸小於257;                     地形紋理中儘量使用少的混合數目:儘量不要超過4個;         》紋理資料;                     紋理貼圖:紋理格式 儘量採取壓縮格式;                     紋理尺寸: 長寬小於1024, 同時應該儘量小夠用就好;                     建議使用Mipmap : 雖然Mipmap有可能會增加程式的大小,但會提高渲染效率;         》音訊資料;                     播放時間長的音樂如(背景音樂) 可以使用.ogg或.mp3的壓縮檔案格式;                     播放時間段的音樂       可以使用.wav或.aif格式的未壓縮格式;        》Bunddle        》程式包 2.引擎方面;
        》光源設定;                     在滿足效果的前提下,控制場景中光源的個數,儘量不要新增冗餘光源;                     控制Important光源的數目 , 儘量1個或乾脆沒有,個數越多,drawcall越多;                     Pixel Light Count : 1-2個;         》相機設定;                     設定合理的剪切平面,可根據不同的場景進行修改;         》粒子特效;                     螢幕上的粒子總數 ,建議小於200個粒子;                     每個粒子發射器所發射的粒子總數建議不超過50個;
                    粒子大小:如果可以的話,粒子的Size應該儘量的小;                     對於非常小的粒子,在其粒子紋理中可以去除Alpha通道;     儘量不要開啟粒子的碰撞功能;
        》物理引擎:                     碰撞體控制:儘可能使用Sphere Collider 和 Box Collider,儘量避免使用Mesh Collider;         》渲染優化;                     儘可能的避免使用Alpha Test和Alpha Blend                             Alpha Test 的價效比較低,可能的話,使用Alpha Blend 來代替Alpha Test.                             將使用Alpha Test 和Alpha Blend的畫素數降至最低;                      DrawCall Batching;                             Unity在渲染是,可以將一些物體合併,從而可以使用一個DrawCall來渲染他們,這稱為DrawCall Batching。理論上將,UntiyBatching的物體越多,則會得到個號的渲染性 能;                     Static Batching;                     Dynamic Batching;  縮放物體無法與非縮放物體進行                     紋理合並Texture Patching;                     遮擋剔除(Occlusion Culling):主要是對OverDraw進行優化;          》動畫 3.程式碼方面;         》對於監測的函式,可以每隔幾幀執行一次;         》通過使用InvokeRepeating函式實現定時重複呼叫,比如,啟動0.5秒後每隔1秒執行一次DoSomeThing函式;         》儘量少使用臨時變數,特別是在Update、OnGUI等實時呼叫好的函式中;         》定時進行垃圾回收;         》優化數學運算,儘量避免使用Float,而使用Int,特別是在手機遊戲中,儘量少用複雜的數學函式,比如sin,cos等函式;         》改除法為乘法,例如:使用x*0.5f而不是x/2.0f; 4.著色器Shader

某公司內部分享資料;