優(yōu)化移動端游戲性能|來自Unity頂級工程師的物理、UI和音頻設(shè)置小貼士

來源: Unity官方平臺
作者:Unity
時間:2021-09-18
18001
Unity 的內(nèi)置物理系統(tǒng) (Nvidia PhysX) 在移動設(shè)備上開銷較大。下面的提示可以幫助您每秒減少更多幀。

物理

Unity 的內(nèi)置物理系統(tǒng) (Nvidia PhysX) 在移動設(shè)備上開銷較大。下面的提示可以幫助您每秒減少更多幀。

優(yōu)化設(shè)置

在 PlayerSettings 中,盡可能選中 Prebake Collision Meshes。


啟用 Prebake Collision Meshes

請務(wù)必同時編輯 Physics 設(shè)置 (Project Settings > Physics)。盡可能簡化 Layer Collision Matrix。

禁用 Auto Sync Transforms 并啟用 Reuse Collision Callbacks。


修改物理項目設(shè)置以進(jìn)一步提高性能


留意 Profiler 的 Physics 模塊是否有性能問題

  簡化碰撞體

網(wǎng)格碰撞體開銷較大。用簡單的原始碰撞體或網(wǎng)格碰撞體代替更復(fù)雜的網(wǎng)格碰撞體來近似原始形狀。


使用原始或簡化網(wǎng)格來表示碰撞體

  使用物理方法移動剛體

使用類方法(如 MovePosition 或 AddForce)來移動 Rigidbody 對象。直接轉(zhuǎn)換其 Transform 組件可能導(dǎo)致重新計算物理世界,在復(fù)雜場景中,這樣需要較大開銷。

在 FixedUpdate 中而不是 Update 中移動物理體。

  修改固定時間間隔

Project Settings 中的默認(rèn) Fixed Timestep 是 0.02 (50 Hz)。根據(jù)目標(biāo)幀率對此進(jìn)行更改(例如,對 30 fps 設(shè)置為 0.03)。

否則,如果幀率在運行時下降,也就是說 Unity 每幀都多次調(diào)用 FixedUpdate,可能會因物理內(nèi)容過多而造成 CPU 性能問題。

Maximum Allowed Timestep 對幀率下降時物理計算和 FixedUpdate 事件可以使用的時間進(jìn)行限制。降低該值意味著在性能頓挫過程中,物理系統(tǒng)和動畫會緩慢下來,但也會減小其對幀率的影響。


將以減 Fixed Timestep 修改為與目標(biāo)幀率相符,降低 Maximum Allowed Timestep 以減少性能毛刺

  通過 Physics Debugger 實現(xiàn)可視化

使用 Physics Debug 窗口 (Window > Analysis > Physics Debugger) 可幫助故障檢查有問題的碰撞體或者出現(xiàn)差異的情況。下面是一個顏色編碼的指示器,指示哪些游戲?qū)ο罂梢韵嗷ヅ鲎病?/p>


Physics Debugger 可幫助您可視化物理對象能夠相互交互的方式

有關(guān)更多信息,請參閱 Unity 文檔中的物理調(diào)試可視化。

https://docs.unity3d.com/cn/current/Manual/PhysicsDebugVisualization.html


用戶界面 UI

Unity UI (UGUI) 常常是性能問題的來源。Canvas 組件生成和更新 UI 組件的網(wǎng)格并向 GPU 發(fā)出繪制調(diào)用。它的運行開銷很大,因此,在使用 UGUI 時,請注意以下因素。

Unity UI 文檔:

https://docs.unity3d.com/Packages/com.unity.ugui@1.0/manual/index.html

  劃分畫布

如果是包含成千上萬個元素的大型畫布,更新單個 UI 元素就必須更新整個畫布,這可能會造成 CPU 尖峰。

利用 UGUI 的功能可以支持多個畫布。根據(jù) UI 元素的更新頻率要求,劃分這些元素。將靜態(tài) UI 元素保留在單獨的畫布上,將同時更新的動態(tài)元素保留在較小的子畫布上。

確保每個畫布中的 UI 元素都有相同的 Z 值、材質(zhì)和紋理。

  隱藏不可見的 UI 元素

可能有些 UI 元素(如僅當(dāng)角色收到傷害時才出現(xiàn)的生命值血條)只偶爾在游戲中出現(xiàn)。如果不可見的 UI 元素是活動的,它仍然可能使用繪制調(diào)用。顯式禁用所有不可見的 UI 組件,在需要時再重新啟用。

如果只需要關(guān)閉畫布的可見性,請禁用 Canvas 組件而不是游戲?qū)ο?。這樣就不必重新構(gòu)建網(wǎng)格和頂點。

  限制 GraphicRaycaster 和禁用 Raycast Target

輸入事件(如屏上觸摸或單擊)需要 GraphicRaycaster 組件。它只是循環(huán)處理屏幕上的每個輸入點,檢查它是否在 UI 的 RectTransform 之內(nèi)。

從層級視圖的頂層畫布中移除默認(rèn)的 GraphicRaycaster。只向需要交互的各元素(按鈕、滾動矩形等)添加 GraphicRaycaster。


禁用在默認(rèn)情況下處于活動狀態(tài)的 Ignore Reversed Graphics

另外,在所有不需要 Raycast Target 的 UI 文本和圖像上將其禁用。如果是包含很多元素的復(fù)雜 UI,所有這些小更改都可以減少不必要的計算。


盡可能禁用 Raycast Target

  避免使用布局組

布局組的更新很低效,應(yīng)少量使用。如果內(nèi)容是動態(tài)的,應(yīng)完全避免不用,而是使用錨點進(jìn)行比例布局?;蛘?,創(chuàng)建自定義代碼,在 Layout Group 組件設(shè)置 UI 之后,將該組件禁用。

Layout Group 文檔:

https://docs.unity3d.com/Packages/com.unity.ugui@1.0/manual/UIAutoLayout.html

如果動態(tài)元素確實需要使用布局組(水平、垂直、網(wǎng)格),應(yīng)避免嵌套它們,從而改善性能。


布局組會降低性能,尤其是在嵌套時

  避免使用大型列表和網(wǎng)格視圖

大型列表和網(wǎng)格視圖開銷很大。如果需要創(chuàng)建大型列表或網(wǎng)格視圖(如包含成百上千項目的物品欄屏幕),可以考慮重復(fù)使用較小的 UI 元素池,而不是為每個項目都創(chuàng)建 UI 元素。請參閱此示例 GitHub 項目了解實際方法。

GitHub 項目:

https://github.com/boonyifei/ScrollList

  避免大量使用重疊元素

對大量 UI 元素(如卡牌游戲中堆疊的卡牌)分層會造成過度繪制。自定義代碼在運行時將分層元素合并到更少的元素和批次中。

  使用多種分辨率和寬高比

現(xiàn)在,移動設(shè)備使用的分辨率和屏幕大小極為不同,創(chuàng)建不同的 UI 版本可以按設(shè)備提供最佳體驗。

UI 版本:

https://docs.unity3d.com/Packages/com.unity.ugui@1.0/manual/HOWTO-UIMultiResolution.html

使用設(shè)備模擬器可以預(yù)覽 UI 在各種受支持的設(shè)備上的呈現(xiàn)。您也可以在XCode 和 Android Studio 中創(chuàng)建虛擬設(shè)備。

設(shè)備模擬器:

https://docs.unity3d.com/Manual/com.unity.device-simulator.html


使用設(shè)備模擬器預(yù)覽各種屏幕格式

  使用全屏 UI 時,隱藏其他全部內(nèi)容

如果暫停屏幕或者啟動屏幕遮住場景中的其他全部內(nèi)容,則禁用攝像機對 3D 場景的渲染。同樣,禁用隱藏在頂層畫布之后的所有背景畫布元素。

由于不需要以 60 fps 的幀率進(jìn)行更新,可以考慮在全屏 UI 過程中降低 Application.targetFrameRate。

  將攝像機分配給世界空間畫布和攝像機空間畫布

將 Event 或 Render Camera 字段留空會使 Unity 填充 Camera.main,這會導(dǎo)致不必要的開銷。

盡可能使畫布 RenderMode 采用 Screen Space - Overlay,這樣就不需要攝像機。


使用世界空間 (World Space) 渲染模式時,請務(wù)必填充 Event Camera


音頻

盡管音頻通常不會造成性能瓶頸,還是可以進(jìn)行優(yōu)化以節(jié)省內(nèi)存。

  盡量使用單聲道聲音剪輯

如果要使用 3D 空間音頻, 請以單聲道 (single channel) 的形式創(chuàng)作聲音剪輯,或者啟用 Force To Mono 設(shè)置。在運行時定位使用的多聲道聲音會扁平化為單聲道源,因此會增加 CPU 開銷和浪費內(nèi)存。

  盡可能使用原始未壓縮 WAV 文件作為源資源

如果使用任何壓縮格式(如 MP3 或 Vorbis),Unity 會將其解壓并在構(gòu)建時重新壓縮。這樣會導(dǎo)致兩個有損通道,從而降低最終質(zhì)量。

  壓縮剪輯并降低壓縮比特率

通過壓縮減小剪輯的大小和內(nèi)存使用量 :

 對大多數(shù)聲音使用 Vorbis(或者對不循環(huán)的聲音使用 MP3)。

 對常用的短聲音使用 ADPCM(如腳步聲、槍聲)。相比于未壓縮的 PCM,這樣可以減小文件大小,在播放時又可以很快解碼。

移動設(shè)備上的音效最高為 22,050 Hz。使用較低設(shè)置通常對最終質(zhì)量影響很小,當(dāng)然,請使用您自己的耳朵來判斷。


優(yōu)化 AudioClip 的導(dǎo)入設(shè)置

  選擇正確的加載類型

每個剪輯大小的設(shè)置都不同。

 小剪輯 (< 200 kb) 應(yīng)采用 Decompress on Load。將聲音解壓縮為原始 16 位PCM 音頻數(shù)據(jù),會導(dǎo)致 CPU 開銷和內(nèi)存占用,因此,這僅適用于短聲音。

 中等剪輯 (>= 200 kb) 應(yīng)保持為 Compressed in Memory。

 大文件(背景音樂)應(yīng)設(shè)置為 Streaming。否則,整個資源會一次性加載到內(nèi)存中。

  從內(nèi)存中卸載靜音的音頻源 (AudioSources)

實現(xiàn)靜音按鈕時,不要只是將音量設(shè)置為 0。可以銷毀 AudioSource 組件,從而將其從內(nèi)存中卸載,這樣,播放器不需要過于頻繁地切換開關(guān)。

立即登錄,閱讀全文
版權(quán)說明:
本文內(nèi)容來自于Unity官方平臺,本站不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。文章內(nèi)容系作者個人觀點,不代表快出海對觀點贊同或支持。如有侵權(quán),請聯(lián)系管理員(zzx@kchuhai.com)刪除!
相關(guān)文章
Unity Ads持久發(fā)力!《廣告平臺綜合表現(xiàn)報告》最新版出爐
Unity Ads持久發(fā)力!《廣告平臺綜合表現(xiàn)報告》最新版出爐
廣告是游戲廠商盈利的主要手段之一,Unity Ads一直在不斷改進(jìn)廣告變現(xiàn)功能,幫助開發(fā)者更高效地盈利。
Unity Ads
2022-03-302022-03-30
《廣告平臺綜合表現(xiàn)報告》最新版出爐!Unity Ads成為雙料冠軍
《廣告平臺綜合表現(xiàn)報告》最新版出爐!Unity Ads成為雙料冠軍
近日,AppsFlyer重磅發(fā)布了《廣告平臺綜合表現(xiàn)報告(第十三版)》(以下簡稱“報告”),Unity Ads斬獲全球iOS游戲榜單與Android IAA榜單冠軍。
Unity Ads
2021-10-272021-10-27
Unity Ads案例分享:《Farm Away!》
Unity Ads案例分享:《Farm Away!》
今天為大家分享的就是一款使用Unity制作,同時集成了Unity Ads服務(wù)的休閑游戲《Farm Away!》。
Unity Ads
2021-10-122021-10-12
攜手打造云游戲生態(tài),Unity出席阿里巴巴主辦的“云游戲產(chǎn)業(yè)論壇”
攜手打造云游戲生態(tài),Unity出席阿里巴巴主辦的“云游戲產(chǎn)業(yè)論壇”
2021 年 9 月 24 日至 9 月 26 日,北京國際游戲創(chuàng)新大會(BIGC 2021)在海淀區(qū)舉行。以“創(chuàng)新·引領(lǐng)·融合”為主題,大會由開幕式暨游戲創(chuàng)新峰會、主題分享、閉門座談會、年度游戲推優(yōu)、北京國際游戲創(chuàng)新展五部分主體活動組成。在阿里巴巴云游戲事業(yè)部主辦的“云游戲產(chǎn)業(yè)論壇”上,Unity 大中華區(qū)平臺技術(shù)總監(jiān)楊棟受邀出席,與眾多游戲產(chǎn)業(yè)權(quán)威專家、知名企業(yè)高管,從游戲產(chǎn)業(yè)趨勢、云游戲關(guān)鍵技術(shù)、云游戲解決方案、玩家體驗等多方面開展主題分享與話題探討。
Unity
2021-09-272021-09-27
優(yōu)質(zhì)服務(wù)商推薦
更多
掃碼登錄
打開掃一掃, 關(guān)注公眾號后即可登錄/注冊
加載中
二維碼已失效 請重試
刷新
賬號登錄/注冊
個人VIP
小程序
快出海小程序
公眾號
快出海公眾號
商務(wù)合作
商務(wù)合作
投稿采訪
投稿采訪
出海管家
出海管家