熱門
Unity功能詳解,助力創作者有效優化移動端游戲性能
隨著手游的火熱,移動端游戲慢慢變成了游戲中的主流類型。許多知名工作室、獨立工作室和獨立創作者都開始轉而進行移動端游戲的制作。在制作游戲的過程中內存的過度使用,CPU性能限制等問題往往讓游戲創作者十分頭疼。Unity的高級軟件工程師團隊將為這些復雜技術問題提供支持并幫助創作者們大幅優化移動端游戲性能。在本文中他們將與我們分享一些有關移動端游戲優化的專業知識,如果你對創作移動端游戲充滿熱情或是正苦于沒有好的引擎制作游戲,那么不妨請繼續看下去。
多年的行業經驗使得Unity的加速解決方案團隊對游戲源代碼了如指掌,與大量的用戶合作,也使得他們能夠充分利用Unity引擎幫助用戶解決各種在開發中遇到的難題。他們深入到游戲項目之中,幫助用戶確定游戲的性能優化點,以獲得更高的速度、穩定性和效率。
在本文中將詳細介紹如何通過用戶界面、物理和音頻設置等功能來提高游戲性能。
現在讓我們開始吧!
物理特性
Unity內置的Physics (Nvidia PhysX)在手機上可能很耗費資源,但以下技巧可以幫助你每秒擠出更多幀。
優化設置
在PlayerSettings中,找到Prebake Collision Meshes
請確保你已經編輯了Physics settings(Project Settings > Physics)并已經簡化了?Layer Collision Matrix。
禁用Auto Sync Transforms并啟用Reuse Collision Callbacks。
修改物理項目設置以提高性能。
請留意性能分析器中的物理模塊。
簡化colliders
使用Mesh colliders可能會很占用資源。用原始或簡化的Mesh colliders來替換更復雜的Mesh colliders,來顯示原始形狀將會有效的節約資源。
colliders使用基本體或簡化網格。
使用物理方法移動剛體
使用分類法,如移動位置或者添加力移動你的剛體物體。剛體的變形組件會直接導致物理世界的重新計算,這在復雜場景的創建中非常耗費資源。所以我們可以將物理物體移入固定數據而無需更新。
修正Fixed Timestep
默認值Fixed Timestep在項目設置中是0.02 (50 Hz)。更改此項屬性可以更好的匹配你的目標幀速率(例如,30 fps為0.03)。
但是,如果幀速率在運行時下降,這意味著Unity會每幀多次調用固定數據,這可能造成CPU性能負擔。
Maximum Allowed Timestep能夠限制物理計算和固定數據事件在幀速率下降時可以使用的時間。降低該值意味著在性能故障期間,物理引擎和動畫可能會變慢,同時也會降低它們對幀速率的影響。
修改固定時間步長以匹配您的目標幀速率,并降低最大允許時間步長以減少性能故障。
使用物理調試器可視化
使用物理調試窗口(窗口>分析>物理調試器)來幫助解決碰撞或差異的任何問題。
物理調試工具可以幫助用戶可視化物理對象之間的交互方式。
用戶界面
Unity用戶界面(UGUI)經常會成為性能問題的來源。畫布組件能夠為用戶界面元素生成并更新網格,并向圖形處理器發出繪制調用。它的功能可能很耗費資源,因此在使用UGUI時,請記住以下要素。
區分開畫布
如果有一個包含數千個元素的大畫布,更新單個用戶界面元素會迫使整個畫布一起更新,這可能會讓CPU達到峰值。
利用UGUI支持多個畫布的能力。根據需要刷新的頻率劃分用戶界面元素。將靜態的用戶界面元素保留在單獨的畫布上,將動態元素同時更新到較小的子畫布上。
這樣能夠確保每個畫布中的所有用戶界面元素具有相同的Z值、材質和紋理。
隱藏不可見的用戶界面元素
在游戲中偶爾會出現一些用戶界面元素(例如,當角色受到傷害時會出現的生命條)。如果啟用不可見用戶界面元素,它可能仍在使用繪制調用。此時需要精確禁用所有不可見的用戶界面組件,并根據需要重新啟用它們。
但如果你只需要關閉畫布的可見性,那么請禁用畫布組件而不是游戲對象。這可以節省重建網格和頂點的時間。
限制圖形投射并禁用光線投射目標
屏幕觸摸或點擊等輸入事件需要圖形投射功能。這在用戶界面矩形變換的過程中簡化了屏幕上的每個輸入點的循環。
從頂層畫布刪除圖形投射默認值。相反,添加圖形投射將專門針對需要交互的單個元素(按鈕、滾動條等)。
禁用反轉圖形,默認情況下處于激活狀態。
另外,我們還可以在所有不需要的UI文本和圖像上禁用射線投射目標。如果用戶界面很復雜,有很多元素,所有這些細小的改變都可以減少不必要的計算,節省資源。
如果可能,禁用射線投射目標。
避免布局組
布局組更新效率低,所以要注意謹慎使用。如果你的內容不是動態的,就完全沒有必要使用布局組功能,你可以使用比例布局的錨點?;蛘咴谠O置用戶界面后創建自定義代碼來禁用布局組組件。
如果你確實需要對動態元素使用布局組(水平、垂直、網格),請避免嵌套它們以提高性能。
布局組會降低性能,尤其是嵌套時。
避免大的列表和網格視圖
大列表和網格視圖非常占用資源。如果需要創建一個大的列表或網格視圖(例如,有數百個項目),不要為每個項目創建一個用戶界面元素,請考慮重用一個較小的用戶界面元素池。
避免大量重疊的元素
將大量用戶界面元素(例如,堆疊在紙牌游戲中的紙牌)分層會造成資源透支。自定義你的代碼,以便在運行時將分層元素合并成更少的元素和批次。
使用多種分辨率和縱橫比
現在的移動設備大多有著不同的分辨率和屏幕尺寸,創建用戶界面的替代版本可以在每臺設備上提供最佳體驗。
使用設備模擬器預覽各種屏幕格式。
使用全屏用戶界面時,隱藏所有其他內容
如果暫?;蜷_始屏幕覆蓋了場景中的所有其他內容,你需要禁用正在渲染3D場景的相機。同樣,禁用隱藏在頂部畫布背后的任何背景畫布元素也能有效提升游戲性能。
在全屏用戶界面期間你可以適當降低Application.targetFrameRate,因為我們不需要以60 fps的幀率進行更新。
將相機分配給世界空間和相機空間畫布
離開事件或者渲染相機字段的空白會迫使Unity填寫主攝像機,這是不必要的資源浪費。
這時你可以使用屏幕空間–覆蓋功能,因為這不需要攝像頭的參與。
使用世界空間渲染模式時,請確保填寫事件攝影機。
音頻
雖然音頻通常不是性能瓶頸,但你仍然可以對其進行優化以節省內存。
優化音頻剪輯的導入設置。
盡可能使用原始未壓縮的WAV文件作為你的源資產
如果你使用任何壓縮格式(如MP3或Vorbis)的音頻,你需要使用Unity將它解壓縮,然后在構建時重新壓縮它。這會導致兩次音頻有損,降低最終質量。
壓縮剪輯并降低壓縮比特率
通過壓縮減少剪輯的大小和內存使用:
對于大多數音頻(或MP3文件對于不循環的音頻)我們可以使用Vorbis對其進行壓縮。
使用自適應差值脈沖編碼調制(ADPCM),經常使用的聲音(例如,腳步聲、槍聲)。與未壓縮的PCM相比,這將縮小文件,但在回放的過程中可以快速解碼。
移動設備上的音效上限是22050Hz。使用較低的設置通常對最終質量影響最??;這需要用自己的耳朵去判斷。
選擇合適的負載類型
設置因片段大小而異。
小剪輯(<200 kb)應該加載時解壓縮。將聲音解壓縮為原始的16位PCM音頻數據會增加CPU使用率和內存,因此此方法只適合短聲音。
中等剪輯(<= 200 kb)應該保留在內存中壓縮。
大文件(背景音樂)應該設置為流動,否則整個資產將立即加載到內存中。
從內存中卸載靜音音頻源
在創建靜音按鈕時,不要簡單地將音量設置為0。你可以將音頻源組件從內存中卸載,但前提是玩家不會經常打開和關閉它。
電話:010-50951355 傳真:010-50951352 郵箱:sales@www.gentlemenlisten.com ;點擊查看區域負責人電話
手機:13811546370 / 13720091697 / 13720096040 / 13811548270 /
13811981522 / 18600440988 /13810279720 /13581546145