1. 程式人生 > 程式設計 >Unity專案優化相關技巧

Unity專案優化相關技巧

目錄
  • 一、簡單優化
  • 二、優化進階
  • 四、程式碼相關優化

一、簡單優化

1.圖片紋理大小盡量為2的冪次方(比如128,512,1024等等),以便unity對其進行優化。

2.將多個小圖片紋理合並一個大的圖片紋理以降低drawcall,特別是同一個ui面板的元素都www.cppcns.com放到一個圖集中,背景圖片儘量單獨做一個圖片。

3.儘可能的共用材質球,原因同上。

4.不需要播放動畫的模型把Animator或animation元件刪除掉,因為不管用或不用他們都會被初始化。

5.模型方面要注意儘可能的減少頂點數和三角面數,儘可能重用頂點

6.紋理的mipmap視情況開關(一般用於3D場景,UI和2D遊戲中不要使用),開啟的話可以減少紋理疊加時的抖動閃爍問題加快渲染速度,減少影象鋸齒;但是會佔用更多的記憶體空間以及使專案的打包檔案變大(畢竟生成了一系列逐層縮小的備份小圖)。

7.將場景中不會發生變化(位移、旋轉等)的物體設定為Static,方便unity進行靜態批處理。

8.開啟player setting中的靜態批處理(Static Batching)和動態批處理(Dynamic Batching):靜態批處理需要勾選場景中不需要變化的物體的Batching Static,否則不會起到優化效果;注意,使用合批處理後僅是降低了CPU到GPU的傳輸次數和SetPassCall且不需要再次執行頂點變化操作,但是會增大包體及記憶體消耗。

9.燈光方面Spotlight開銷很大要儘量少用。

10.儘量少用實時陰影,若必用不可則使用Hard Shadow。

11.謹慎使用半透明材質和UI以減少overdraw,如alpha為0的image雖然不可見但是gpu仍然會對其進行繪製;若UI中存在很多半透明介面,建議UI由單獨的攝像機進行渲染,且UI不要疊加到場景攝像機渲染範圍內。

二、優化進階

1.使用緩衝池管理需要經常出現和銷燬的object。

2.視情況使用lod技術,使用此技術需要製作多套模型,故而會使專案的打包檔案變大同時會佔用更多記憶體,但是可以降低需要繪製的頂點數目,若距離調整不好可能會出現模型突變的情況。

3.視情況使用OC(遮擋剔除)功能(通常用於場景中有大量模型的情況),使用此功能可以大大降低overdraw(畢竟被遮擋的物體直接不渲染了),需要注意物體的大小要與單元格大小達到一個平衡;可以通過設定物體的Occluder Static和Occludee Static來控制物體為遮擋物或被遮擋物。此技術的缺點就是會耗費額外的CPU。

4.使用燈光貼圖搭配light probe gro

up來替代實時光照,使用此技術對模型要求較高,不能有UV錯亂、法線錯亂的情況,否則會出現很奇葩的狀況;同時使用此技術將不會有動態陰影生成。

5.針對不同的平臺對紋理進行壓縮(比如IOS為pvrtc;安卓為ETC1,若有alpha通道則使用RGBA 16-bit),需要注意的是壓縮後有時會影響紋理的質量。

6.不同UI介面使用多個Canvas,因為unity為了效能優化會合並canvas下所有元素到一個Mesh中;如果所有介面放到一個canvas,在介面發生變化的時候會造成重繪,降低效能,最優解是一個靜態的ui放一個canvas,動態的ui視情況分別放到不同canvas中,注意也不要分的太細不然會造成dc的增加。

7.蒙皮網格動畫改為頂點動畫,用空間換時間

8.移動端若對渲染幀率沒有特定要求,可以通過降低幀率的形式來節省機器效能,需要注意在QualitySettings.vSyncCount中不能設定為Don't Sync否則下面的設定將無效,設定方式如下:

在專案配置類或主類中的Awake或Start中加入下面的程式碼

Application.targetFrameRate = 30;    //移動平臺預設30為比較節省電量的幀率,若要達到最佳效能則設定為300(這樣機器會盡其所能提高幀率,但是很大概率達不到300)

9.合理利用Profiler進行效能瓶頸分析與優化。

10.將Terrain轉為Mesh,大地圖使用流式載入及解除安裝技術。

11.模型的蒙皮網格動畫改為頂點動畫,用空間換時間。

12.使用Animation Instancing優化大量模型動畫。

13.儘可能用BoxCollider替代MeshCollider。

三、深度優化(操作起來比較複雜,需要掌握一些底層知識或需要極端優化的情況)

1.使用自定義shader

2.合併mesh(此處可以學習下林大佬寫的相關部落格)

3.UI中不涉客棧及到射線檢測的Canvas把GraphicRaycaster元件刪掉

4.儘量少用LayoutGroup和contentSizeFitter,雖然用起來比較方便,但是在使用者操作時會導致整個ui介面的重繪,有能力的大牛建議自己寫一個演算法來實現區域性的重繪,沒有能力的就只能在使用這倆元件的地方使用單獨的Canvas來儘量避免整個UI的重繪了。

5.視情況使用單通道例項化渲染:要啟用此功能,請開啟Player設定(選擇Edit>Project Settings__,然後選擇Player__ 類別)。在Player設定中,導航到底部的XR Settings面板,選中Virtual Reality Supported選項,然後從Stereo Rendering Method下拉選單中選擇Single Pass Instanced (Preview)

四、程式碼相關優化

1.用for迴圈替代foreach、

2.用gameObject.CompareTag("tag")替代gameObject.tag="tag".

3.Find、GetComponent方法儘量在Start、Awake之中呼叫,不要在Update之類方法中呼叫。

4.用string.format替代+拼接字串。

5.物理檢測在fixedUpdate中進行。

以上就是Unity專案優化相關技巧的詳細內容,更多關於Unity專案優化的資料請關注我們其它相關文章!