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