溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

unity3d游戲開(kāi)發(fā)優(yōu)化簡(jiǎn)單說(shuō)明

發(fā)布時(shí)間:2020-02-29 04:47:52 來(lái)源:網(wǎng)絡(luò) 閱讀:825 作者:qwe9897 欄目:游戲開(kāi)發(fā)

對(duì)于游戲來(lái)說(shuō),流暢是最重要的條件,所以好的游戲一定會(huì)有個(gè)好的優(yōu)化,個(gè)人認(rèn)為unity3d游戲開(kāi)發(fā)優(yōu)化應(yīng)從3塊下手:CPU、內(nèi)存、GPU

1.Draw Calls(CPU調(diào)用底層圖形接口):Draw Call Batching(動(dòng)批)和Static Batching (靜批)

Draw Call Batching(動(dòng)批) 滿足條件

1.一般大型手機(jī)游戲,雙核的手機(jī),Tris(面)最好小于2萬(wàn),4核的手機(jī)最好不能超過(guò)4~5萬(wàn)左右

2.一般不關(guān)心模型是什么樣子,也不關(guān)心是幾個(gè)模型,只要這些模型的頂點(diǎn)數(shù)少于300個(gè),并且用的是相同材質(zhì)且是單pass的,就能參與動(dòng)態(tài)批處理

3.縮放可能會(huì)影響bathces,也可能不影響,看unity版本,一般5.以后的版本不影響

4.只有Mesh Renderer的模型才支持動(dòng)態(tài)批處理

5.Skinned Mesh Renderer 是骨骼或者人物蒙皮渲染,是不支持動(dòng)批的

6.所有參與過(guò)燈光烘焙的物體,因?yàn)槭庆o態(tài)的,所以不能動(dòng)態(tài)批處理

Static Batching (靜批)(一般能用靜批的盡量用靜批)滿足條件

1.必須是靜態(tài)(對(duì)于有沒(méi)有烘焙,不關(guān)心)

2.無(wú)頂點(diǎn)要求

3.和shader無(wú)關(guān)(單pass或者雙pass都無(wú)關(guān)),只和材質(zhì)有關(guān)

4.靜態(tài)物體是不支持縮放的,如果進(jìn)行縮放,則不會(huì)靜態(tài)批處理

移動(dòng)端Draw Calls 優(yōu)化:(重要)

1.建議Draw Calls 在100左右(雙核處理器) ,四核處理器建議在200~300

2..物理方面(組件和引擎)

1.碰撞(調(diào)用最底層物理引擎,消耗cpu性能),優(yōu)先使用box collider,盡量不用mesh collider。

2.碰撞層(不需要碰撞的層,取消打勾,這個(gè)比較重要)
unity3d游戲開(kāi)發(fā)優(yōu)化簡(jiǎn)單說(shuō)明

3.幀數(shù)優(yōu)化(移動(dòng)端建議0.033,就是1秒鐘30幀。pc端性能普遍較好,建議0.01)(至于VR和AR建議次數(shù)更多,這個(gè)值和fps相關(guān)聯(lián)的,就這一句話,可能是VR和AR開(kāi)發(fā)人員的福音。)
unity3d游戲開(kāi)發(fā)優(yōu)化簡(jiǎn)單說(shuō)明

4.建議選擇Don‘t Sync(關(guān)閉垂直同步),然后在C#游戲入口代碼里面的Awake或者Start里面寫(xiě)上
unity3d游戲開(kāi)發(fā)優(yōu)化簡(jiǎn)單說(shuō)明

Application.targetFrameRate = XX;(移動(dòng)端建議30,PC端建議60.這個(gè)重要的不要不要的,為什么移動(dòng)的幀數(shù)是30?,不深入,總之不要太高,否則消耗性能不說(shuō),cpu還會(huì)發(fā)燙)

【步驟3和4請(qǐng)同時(shí)操作】

3.代碼優(yōu)化

1.少用反射,ios開(kāi)發(fā)的可以忘了反射(不是不用哈,少用)

2.務(wù)必在工程發(fā)布前刪除代碼里面的Debug.Log和print (重要,這2個(gè)比較消耗性能)

3.不要頻繁創(chuàng)建或?qū)嵗蜾N毀對(duì)象,請(qǐng)使用對(duì)象池(Pool)(重要)。

4.同一腳本中頻繁使用的變量建議聲明其為全局變量,腳本之間頻繁調(diào)用的變量或方法建議聲明為全局靜態(tài)變量或方法。(重要)

5.不要去頻繁獲取組件,將其聲明為全局變量.

6.用簡(jiǎn)單的“for”循環(huán)代替“foreach”循環(huán)。

7.數(shù)組、集合類元素優(yōu)先使用Array,其次是List,少用ArrayList(會(huì)拆裝箱操作)。

8.在循環(huán)語(yǔ)句力里面,不要直接訪問(wèn)gameobject的tag屬性。比如if (go.tag == “human”)最好換成if (go.CompareTag (“human”))。因?yàn)樵L問(wèn)物體的tag屬性會(huì)在堆上額外的分配空間。如果在循環(huán)中這么處理,會(huì)留下垃圾。

9.盡量少用模運(yùn)算和除法運(yùn)算,比如a/5f,一定要寫(xiě)成a*0.2f。

10.String的相加操作,會(huì)頻繁申請(qǐng)內(nèi)存并釋放,導(dǎo)致gc頻繁,使用System.Text.StringBuilder代替

11.Update少用,少在Update里面做循環(huán),更少做復(fù)雜操作。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI