1 控制粒子數量
如果特效中的粒子數量過多,在特效釋放時就可能會造成卡頓,所以需要將粒子數量控制在合理的數量範圍之內。一般在手遊項目中,單個特效的粒子數量不超過100個,複雜的特效也爭取控制在150~200個。單個粒子系統的最大粒子數不要設置為默認的1000,需要多少設置多少,一般為0~30。
2.去除陰影選項
2.1.模型體取消陰影選項
如果“粒子系統/模型網格體”啟用了“陰影”選項,那麼在遊戲運行時會對它進行實時的光照渲染,從而造成不必要的性能損耗。
如果它們並不需要受光照影響的話,則建議取消“陰影”選項。模型和粒子系統的“陰影”選項設置位置略有不同,以下分別進行講解。
首先選擇模型體,然後在Inspector(檢測視圖)中查看該物體的屬性,找到MeshRenderer(網格渲染)組件中的陰影設置項,如圖
然後把Cast Shadows(投射陰影)修改為Off,接著把下一個屬性ReceiveShadows(接收陰影)後面的選項勾取消。
2.2.粒子系統取消陰影選項
選擇粒子系統後,在Inspector(檢測視圖)中查看粒子的屬性設置。在Renderer(渲染)組件中找到粒子系統的陰影設置項,如圖。
然後同樣把Cast Shadows(投射陰影)修改為Off,把下一個屬性ReceiveShadows(接收陰影)後面的選項勾取消。
3.避免使用燈光系統
製作特效時,儘量不要使用燈光系統。雖然使用燈光可以產生很棒的實時光照效果,但是對性能的損耗也很大。
一般遊戲場景中的光照陰影信息都是通過Unity烘焙的Lightmaps(光照貼圖)實現的,並不是直接使用實時燈光。
遊戲中的光暈/光斑/光線 等效果都可以由粒子系統製作表現。
4 儘量避免使用粒子碰撞/儘量不使用物理系統
Unity中含有2D/3D物理系統,將模型體轉換為Rigidbody(剛體)或者Cloth(布料)可以進行實時的物理碰撞解算。
但是這種實時解算會造成較大的性能損耗,所以建議儘量避免使用物理系統,以節省不必要的開銷。
如果不能避免的話,也需要儘量減少碰撞體的面數或者使用較少面數的模型體來代替複雜(高面數)模型體。
5.儘量減少使用Sub Emitters(子發射器)
6 優化層級數量
特效層級一般控制在8~10層以內,特殊效果可以適當增加(作用在UI上應更少些),如圖
7 子層級數量控制
如非必要,不要有過多向下層級
8. 優化模型面數
8.1 部分模型頂點數較多,可酌情優化,並去掉相同的冗餘資源。
8.2模型的法線和切線建議選擇Calculate方式。
8.3 部分模型開啟了可讀寫,需要確認是否必要。
8.4 Optimize Mesh建議開啟。
9 關閉模型陰影
如需在特效預製體中使用從3ds Max導入的模型時,需要在Unity中關閉生成和接受陰影,如圖
10 修改動畫幀數 30 (建議)
10.1 創建動畫文件時,需把默認60幀改為30幀
10.2 Optimize Game Object建議開啟,可優化骨骼層級,減少矩陣運算。
11 優化動畫組件
動畫信息不能創建在最高層級,可在最高層級之下創建空掛點,在空掛點上增加動畫組件。
注意: 儘量不要是用舊的動畫系統
12 檢查座標位置
最高層級必須歸零,如需局部偏移、旋轉、縮放,可在第二層級進行座標偏移、旋轉等操作,如圖
13 貼圖尺寸及應用
13.1.修改貼圖尺寸
貼圖尺寸的要求一般是夠用就好,在顯示效果差不多的情況下儘量使用較小尺寸的貼圖。
如果對紋理細節要求較高,那麼建議使用貼圖比例為1∶1的正方形(不強制),使用不等邊貼圖製作特效時會對紋理清晰度造成一定的損失(引擎算法決定)。
13.2 儘量一圖多用
一圖多用有助於減少文件內存,減少Draw call(Unity每次在準備數據並通知GPU渲染的過程),也有助於資源優化。合併紋理、統一調用可以大幅度減少貼圖及材質球數量,在遊戲中即使是不同特效之間也可以共用部分材質,如圖
13.3 Mip Maps
UI特效需要關閉mip maps, (具體看情況確認)
有些圖片看起來像是UI圖片,或尺寸較低,或是純色圖,但開啟了Mip Map,需要確認是否必要。
13.4.減少重複貼圖
13.5 部分對稱的圖片可用鏡像方式優化。
13.6 有些圖片填充率較低,建議去掉空白區域。
14 將不需要移動的物體標記為Static
勾選Static(靜態修飾符)後模型將被Unity處理為靜止狀態,若對象需要移動,則一定不要勾選該項。
15 儘量避免使用高能耗材質
在特效製作中,有時為了完成更豐富、更絢麗的效果,可能會添加一些高級Shader(著色器),例如扭曲、溶解,這些Shader(著色器)往往需要用到顯示卡的部分功能,會造成較大的性能損耗。為了避免這種情況,除了需要程序的優化(TA)外,在製作特效時也需要注意儘量避免使用這些高能耗Shader(著色器)。
16 儘量使用8位通道圖片代替16位通道圖片
17 sprite renderer 會打斷ui合併的處理, 更換成image
18 部分特效的Over Draw較高,建議優化。
比如使用序列幀的方式替換粒子,減少像素的疊加