? 肥大bbwbbw高潮喷水,182tv精品视频在线播放
聯(lián)系我們

給我們留言

聯(lián)系我們

地址:福建省晉江市青陽(yáng)街道洪山路國(guó)際工業(yè)設(shè)計(jì)園納金網(wǎng)

郵箱:info@narkii.com

電話:0595-82682267

(周一到周五, 周六周日休息)

當(dāng)前位置:主頁(yè) > 3D教程 > 圖文教程

總結(jié)使用Unity3D優(yōu)化游戲運(yùn)行性能的經(jīng)驗(yàn)

來(lái)源: 未知 | 責(zé)任編輯:六月芳菲 | 發(fā)布時(shí)間: 2018-05-16 15:16 | 瀏覽量:
更多精彩unity教程:http://trusteddivorcelawyers.com/resource/

流暢的游戲玩法來(lái)自流暢的幀率,而我們即將推出的動(dòng)作平臺(tái)游戲《Shadow Blade》已經(jīng)將在標(biāo)準(zhǔn)iPhone和iPad設(shè)備上實(shí)現(xiàn)每秒60幀視為一個(gè)重要目標(biāo)。
以下是我們?cè)诰o湊的優(yōu)化過(guò)程中提升游戲運(yùn)行性能,并實(shí)現(xiàn)目標(biāo)幀率時(shí)需要考慮的事項(xiàng)。
當(dāng)基本游戲功能到位時(shí),就要確保游戲運(yùn)行表現(xiàn)能夠達(dá)標(biāo)。我們衡量游戲運(yùn)行表現(xiàn)的一個(gè)基本工具是Unity內(nèi)置分析器以及Xcode分析工具。使用Unity分析器來(lái)分析設(shè)備上的運(yùn)行代碼真是一項(xiàng)寶貴的功能。
我們總結(jié)了這種為將目標(biāo)設(shè)備的幀率控制在60fps而進(jìn)行衡量、調(diào)整、再衡量過(guò)程的中相關(guān)經(jīng)驗(yàn)。

更多精彩unity教程:http://trusteddivorcelawyers.com/resource/

一、遇到麻煩時(shí)要調(diào)用“垃圾回收器”(Garbage Collector,無(wú)用單元收集程序,以下簡(jiǎn)稱(chēng)GC)
由于具有C/C++游戲編程背景,我們并不習(xí)慣無(wú)用單元收集程序的特定行為。確保自動(dòng)清理你不用的內(nèi)存,這種做法在剛開(kāi)始時(shí)很好,但很快你就公發(fā)現(xiàn)自己的分析器經(jīng)常顯示CPU負(fù)荷過(guò)大,原因是垃圾回收器正在收集垃圾內(nèi)存。這對(duì)移動(dòng)設(shè)備來(lái)說(shuō)尤其是個(gè)大問(wèn)題。要跟進(jìn)內(nèi)存分配,并盡量避免它們成為優(yōu)先數(shù),以下是我們應(yīng)該采取的主要操作:
1.移除代碼中的任何字符串連接,因?yàn)檫@會(huì)給GC留下大量垃圾。
2.用簡(jiǎn)單的“for”循環(huán)代替“foreach”循環(huán)。由于某些原因,每個(gè)“foreach”循環(huán)的每次迭代會(huì)生成24字節(jié)的垃圾內(nèi)存。一個(gè)簡(jiǎn)單的循環(huán)迭代10次就可以留下240字節(jié)的垃圾內(nèi)存。
3.更改我們檢查游戲?qū)ο髽?biāo)簽的方法。用“if (Go.CompareTag (“Enemy”)”來(lái)代替“if (go.tag == “Enemy”)” 。在一個(gè)內(nèi)部循環(huán)調(diào)用對(duì)象分配的標(biāo)簽屬性以及拷貝額外內(nèi)存,這是一個(gè)非常糟糕的做法。
4.對(duì)象庫(kù)很棒,我們?yōu)樗袆?dòng)態(tài)游戲?qū)ο笾谱骱褪褂脦?kù),這樣在游戲運(yùn)行時(shí)間內(nèi)不會(huì)動(dòng)態(tài)分配任何東西,不需要的時(shí)候所有東西反向循環(huán)到庫(kù)中。
5.不使用LINQ命令,因?yàn)樗鼈円话銜?huì)分配中間緩器,而這很容易生成垃圾內(nèi)存。

更多精彩unity教程:http://trusteddivorcelawyers.com/resource/

二、謹(jǐn)慎處理高級(jí)腳本和本地引擎C++代碼之間的通信開(kāi)銷(xiāo)。
所有使用Unity3D編寫(xiě)的游戲玩法代碼都是腳本代碼,在我們的項(xiàng)目中是使用Mono執(zhí)行時(shí)間處理的C#代碼。任何與引擎數(shù)據(jù)的通信需求都要有一個(gè)進(jìn)入高級(jí)腳本語(yǔ)言的本地引擎代碼的調(diào)用。這當(dāng)然會(huì)產(chǎn)生它自己的開(kāi)銷(xiāo),而盡量減少游戲代碼中的這些調(diào)用則要排在第二位。
1.在這一情景中四處移動(dòng)對(duì)象要求來(lái)自腳本代碼的調(diào)用進(jìn)入引擎代碼,這樣我們就會(huì)在游戲玩法代碼的一個(gè)幀中緩存某一對(duì)象的轉(zhuǎn)換需求,并一次僅向引擎發(fā)送一個(gè)請(qǐng)求,以便減少調(diào)用開(kāi)銷(xiāo)。這種模式也適用于其他相似的地方,而不僅局限于移動(dòng)和旋轉(zhuǎn)對(duì)象。
2.將引用本地緩存到元件中會(huì)減少每次在一個(gè)游戲?qū)ο笾惺褂?“GetComponent” 獲取一個(gè)元件引用的需求,這是調(diào)用本地引擎代碼的另一個(gè)例子。

更多精彩unity教程:http://trusteddivorcelawyers.com/resource/

三、物理效果
1.將物理模擬時(shí)間步設(shè)置到最小化狀態(tài)。在我們的項(xiàng)目中就不可以將讓它低于16毫秒。
2.減少角色控制器移動(dòng)命令的調(diào)用。移動(dòng)角色控制器會(huì)同步發(fā)生,每次調(diào)用都會(huì)耗損極大的性能。我們的做法是緩存每幀的移動(dòng)請(qǐng)求,并且僅運(yùn)用一次。
3.修改代碼以免依賴(lài)“ControllerColliderHit” 回調(diào)函數(shù)。這證明這些回調(diào)函數(shù)處理得并不十分迅速。
4.面對(duì)性能更弱的設(shè)備,要用skinned mesh代替physics cloth。cloth參數(shù)在運(yùn)行表現(xiàn)中發(fā)揮重要作用,如果你肯花些時(shí)間找到美學(xué)與運(yùn)行表現(xiàn)之間的平衡點(diǎn),就可以獲得理想的結(jié)果。
5.在物理模擬過(guò)程中不要使用ragdolls,只有在必要時(shí)才讓它生效。
6.要謹(jǐn)慎評(píng)估觸發(fā)器的“onInside”回調(diào)函數(shù),在我們的項(xiàng)目中,我們盡量在不依賴(lài)它們的情況下模擬邏輯。
7.使用層次而不是標(biāo)簽。我們可以輕松為對(duì)象分配層次和標(biāo)簽,并查詢(xún)特定對(duì)象,但是涉及碰撞邏輯時(shí),層次至少在運(yùn)行表現(xiàn)上會(huì)更有明顯優(yōu)勢(shì)。更快的物理計(jì)算和更少的無(wú)用分配內(nèi)存是使用層次的基本原因。
8.千萬(wàn)不要使用Mesh對(duì)撞機(jī)。
9.最小化碰撞檢測(cè)請(qǐng)求(例如ray casts和sphere checks),盡量從每次檢查中獲得更多信息。

更多精彩unity教程:http://trusteddivorcelawyers.com/resource/

四、讓AI代碼更迅速
我們使用AI敵人來(lái)阻攔忍者英雄,并同其過(guò)招。以下是與AI性能問(wèn)題有關(guān)的一些建議:
1.AI邏輯(例如能見(jiàn)度檢查等)會(huì)生成大量物理查詢(xún)??梢宰孉I更新循環(huán)設(shè)置低于圖像更新循環(huán),以減少CPU負(fù)荷。

更多精彩unity教程:http://trusteddivorcelawyers.com/resource/

五、最佳性能表現(xiàn)根本就不是來(lái)自代碼!
沒(méi)有發(fā)生什么情況的時(shí)候,就說(shuō)明性能良好。這是我們關(guān)閉一切不必要之物的基本原則。我們的項(xiàng)目是一個(gè)側(cè)邊橫向卷軸動(dòng)作游戲,所以如果不具有可視性時(shí),就可以關(guān)閉許多動(dòng)態(tài)關(guān)卡物體。
1.使用細(xì)節(jié)層次的定制關(guān)卡將遠(yuǎn)處的敵人AI關(guān)閉。
2.移動(dòng)平臺(tái)和障礙,當(dāng)它們遠(yuǎn)去時(shí)其物理碰撞機(jī)也會(huì)關(guān)閉。
3.Unity內(nèi)置的“動(dòng)畫(huà)挑選”系統(tǒng)可以用來(lái)關(guān)閉未被渲染對(duì)象的動(dòng)畫(huà)。
4.所有關(guān)卡內(nèi)的粒子系統(tǒng)也可以使用同樣的禁用機(jī)制。

更多精彩unity教程:http://trusteddivorcelawyers.com/resource/

六、回調(diào)函數(shù)!那么空白的回調(diào)函數(shù)呢?
要盡量減少Unity回調(diào)函數(shù)。即使敵人回調(diào)函數(shù)存在性能損失。沒(méi)有必要將空白的回調(diào)函數(shù)留在代碼庫(kù)中(有時(shí)候介于大量代碼重寫(xiě)和重構(gòu)之間)。

更多精彩unity教程:http://trusteddivorcelawyers.com/resource/

七、讓美術(shù)人員來(lái)救場(chǎng)
在程序員抓耳撓腮,絞盡腦汁去想該如何讓每秒運(yùn)行更多幀時(shí),美術(shù)人員總能神奇地派上大用場(chǎng)。
1.共享游戲?qū)ο蟛牧?,令其在Unity中處于靜止?fàn)顟B(tài),可以讓它們綁定在一起,由此產(chǎn)生的簡(jiǎn)化繪圖調(diào)用是呈現(xiàn)良好移動(dòng)運(yùn)行性能的重要元素。
2.紋理地圖集對(duì)UI元素來(lái)說(shuō)尤其有用。
3.方形紋理以及兩者功率的合理壓縮是必不可少的步驟。
4.我們的美術(shù)人員移除了所有遠(yuǎn)處背景的網(wǎng)格,并將其轉(zhuǎn)化為簡(jiǎn)單的2D位面。
5.光照?qǐng)D非常有價(jià)值。
6.我們的美術(shù)人員在一些關(guān)口移除了額外頂點(diǎn)。
7.使用合理的紋理mip標(biāo)準(zhǔn)是一個(gè)好主意(游戲邦注:要讓不同分辨率的設(shè)備呈現(xiàn)良好的幀率時(shí)尤其如此)。
8.結(jié)合網(wǎng)格是美術(shù)人員可以發(fā)揮作用的另一個(gè)操作。
9.我們的動(dòng)畫(huà)師盡力讓不同角色共享動(dòng)畫(huà)。
10.要找到美學(xué)/性能之間的平衡,就免不了許多粒子效果的迭代。減少發(fā)射器數(shù)量并盡量減少透明度需求也是一大挑戰(zhàn)。

更多精彩unity教程:http://trusteddivorcelawyers.com/resource/

八、要減少內(nèi)存使用
使用大內(nèi)存當(dāng)然會(huì)對(duì)性能產(chǎn)生負(fù)面影響,但在我們的項(xiàng)目中,我們的iPod由于超過(guò)內(nèi)存上限而遭遇了多次崩潰事件。我們的游戲中最耗內(nèi)存的是紋理。
1.不同設(shè)備要使用不同的紋理大小,尤其是UI和大型背景中的紋理?!禨hadow Blade》使用的是通用型模板,但如果在啟動(dòng)時(shí)檢測(cè)到設(shè)備大小和分辨率,就會(huì)載入不同資產(chǎn)。
2.我們要確保未使用的資產(chǎn)不會(huì)載入內(nèi)存。我們必須遲一點(diǎn)在項(xiàng)目中找到僅被一個(gè)預(yù)制件實(shí)例引用,并且從未完全載入內(nèi)存中實(shí)例化的資產(chǎn)。
3.去除網(wǎng)格中的額外多邊形也能實(shí)現(xiàn)這一點(diǎn)。
4.我們應(yīng)該重建一些資產(chǎn)的生周期管理。例如,調(diào)整主菜單資產(chǎn)的加載/卸載時(shí)間,或者關(guān)卡資產(chǎn)、游戲音樂(lè)的有效期限。
5.每個(gè)關(guān)卡都要有根據(jù)其動(dòng)態(tài)對(duì)象需求而量身定制的特定對(duì)象庫(kù),并根據(jù)最小內(nèi)存需求來(lái)優(yōu)化。對(duì)象庫(kù)可以靈活一點(diǎn),在開(kāi)發(fā)過(guò)程中包含大量對(duì)象,但知道游戲?qū)ο笮枨蠛缶鸵唧w一點(diǎn)。
6.保持聲音文件在內(nèi)存的壓縮狀態(tài)也是必要之舉。
加強(qiáng)游戲運(yùn)行性能是一個(gè)漫長(zhǎng)而具有挑戰(zhàn)性的過(guò)程,游戲開(kāi)發(fā)社區(qū)所分享的大量知識(shí),以及Unity提供的出色分析工具為《Shadow Blade》實(shí)現(xiàn)目標(biāo)運(yùn)行性能提供了極大幫助。

更多精彩unity教程:http://trusteddivorcelawyers.com/resource/

相關(guān)文章
網(wǎng)友評(píng)論

您需要登錄后才可以發(fā)帖 登錄 | 立即注冊(cè)

關(guān)閉

全部評(píng)論:0條

推薦
熱門(mén)