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

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

物理

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

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

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


啟用 Prebake Collision Meshes

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

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


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


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

  簡(jiǎn)化碰撞體

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


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

  使用物理方法移動(dòng)剛體

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

在 FixedUpdate 中而不是 Update 中移動(dòng)物理體。

  修改固定時(shí)間間隔

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

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

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


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

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

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


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

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

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


用戶界面 UI

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

Unity UI 文檔:

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

  劃分畫布

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

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

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

  隱藏不可見的 UI 元素

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

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

  限制 GraphicRaycaster 和禁用 Raycast Target

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

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


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

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


盡可能禁用 Raycast Target

  避免使用布局組

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

Layout Group 文檔:

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

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


布局組會(huì)降低性能,尤其是在嵌套時(shí)

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

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

GitHub 項(xiàng)目:

https://github.com/boonyifei/ScrollList

  避免大量使用重疊元素

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

  使用多種分辨率和寬高比

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

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 時(shí),隱藏其他全部?jī)?nèi)容

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

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

  將攝像機(jī)分配給世界空間畫布和攝像機(jī)空間畫布

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

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


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


音頻

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

  盡量使用單聲道聲音剪輯

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

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

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

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

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

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

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

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


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

  選擇正確的加載類型

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

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

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

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

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

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

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