激情六月丁香婷婷|亚洲色图AV二区|丝袜AV日韩AV|久草视频在线分类|伊人九九精品视频|国产精品一级电影|久草视频在线99|在线看的av网址|伊人99精品无码|午夜无码视频在线

高校合作1:010-59833514 ?咨詢電話:400-810-1418 服務(wù)與監(jiān)督電話:400-810-1418轉(zhuǎn)接2

unity 游戲 開發(fā)(6年Unity經(jīng)驗(yàn)老司機(jī):我們是如何做引擎和項(xiàng)目優(yōu)化的)

發(fā)布時(shí)間:2023-11-27 14:23:51 瀏覽量:114次

?6年Unity經(jīng)驗(yàn)老司機(jī):我們是如何做引擎和項(xiàng)目優(yōu)化的

unity 游戲 開發(fā)(6年Unity經(jīng)驗(yàn)老司機(jī):我們是如何做引擎和項(xiàng)目優(yōu)化的)

在4月12日的Unite 2016大會上,暴風(fēng)魔鏡高級產(chǎn)品經(jīng)理吳濤分享他用Unity3D開發(fā)VR游戲的經(jīng)驗(yàn),以下為分享實(shí)錄:

我自己是從2010年開始使用U3D開發(fā),之前是做大型端游,也用過虛幻引擎。2010-2011年,中國移動游戲開始爆發(fā),就轉(zhuǎn)到U3D做一些U3D手游開發(fā),去年加入暴風(fēng)魔鏡從事應(yīng)用開發(fā)。

首先給大家分享一下我做Unity開發(fā)的積累的經(jīng)驗(yàn)吧,最早在去年的時(shí)候呢,我從手游的開發(fā)轉(zhuǎn)到了VR開發(fā)。當(dāng)時(shí),我們的產(chǎn)品迭代周期是比較快的,而且還在使用Unity4.X某個版本,剛剛接手VR開發(fā)的時(shí)候很多問題開始暴露,比如我們的資源制作成本增加,資源量增多,性能指標(biāo)提高很多,網(wǎng)絡(luò)環(huán)境要求更加苛刻,基于這些東西,我們也做了一些基于U3D自己的優(yōu)化。

基本上大家從事VR開發(fā)的時(shí)候,還是需要一些基礎(chǔ)團(tuán)隊(duì)的,建議大家都有工程師。大規(guī)模的話,還需要一些U3D工程師。目前我們團(tuán)隊(duì)有4個安卓,還有6個U3D工程師。安卓做接口界面,還有C++開發(fā)。

首先,第一要介紹一下我們的版本管理。我們當(dāng)時(shí)最早我在做這一塊的時(shí)候,當(dāng)時(shí)還是用了三點(diǎn)幾的版本,我們服務(wù)器要進(jìn)行OTA更新,當(dāng)時(shí)設(shè)計(jì)了一個版本管理的配置文件,大家可以看到基本上我們的制作方式是在右面,有每個資源的命名,還有一些標(biāo)志是否被壓縮,比如說最后具體的路徑。

我們當(dāng)時(shí)發(fā)現(xiàn)加載有點(diǎn)緩慢,所以之后把加到了VersionList上面,然后就進(jìn)行二次拼接,這樣保證本地版本和服務(wù)器版本的一致性。

為了去做剛才的版本管理的表,我將我所有的資源進(jìn)行了一個大概的分類,對每一個分類都增加另外一套配置,可以看到那面,包括我們自己自定義的所有文件的合成,同樣會帶來一些路徑,帶來一些資源的ID,帶來一些平臺,當(dāng)然也有類型壓縮很多種方式,是否跟焦點(diǎn)綁定。

資源大概生成的過程的話基本上就是這樣子,我們會自己寫一個類似于生成的工具,然后我們資源制作完之后會放到自己的資源夾子,是跟美術(shù)資源分離,但會存在一個預(yù)制體和資源捆綁關(guān)系,將預(yù)制體進(jìn)行build生成Assetbundle,我將原有的進(jìn)行更新,再重新寫我的VersionList,保證自己的新生資源和老資源是一致的。

大家都知道一般現(xiàn)在老的Unity版本經(jīng)常資源會有一些泄露,比如說我們的美術(shù)資源經(jīng)常被別人反編輯出來拿到圖片拿到模型,所以說當(dāng)我生成這個之后,在那里做一次資源的加密,當(dāng)時(shí)制作是比較簡單,現(xiàn)在會加更復(fù)雜的算法,比如一些越界對稱非對稱之類的,加這個之后呢我們遇到另外一個問題就是,因?yàn)閂R,很多模型不像之前做手游可以刪除一些,貼圖可以小一些,他很大,這里的話資源加密之后又做了自定義壓縮,當(dāng)時(shí)我們找了很多相關(guān)的庫,最后是通過我自己的原碼,自己重新改過了一個自定義壓縮庫,他基本上我們在做完這步之后比以前的降了30%左右,最后是資源管理和內(nèi)存管理,我當(dāng)時(shí)做的時(shí)候也是有一點(diǎn)困難,但是我當(dāng)時(shí)就很慶幸的時(shí)候認(rèn)識一個U3D工程師,首先是如果有相關(guān)連的時(shí)候會有三個游戲?qū)ο?,?dāng)我釋放一個的時(shí)候只將其中一個對象把他Release掉,另外兩個不會,同樣第二個釋放掉也會把第二個Release掉,第三個全部Release掉的時(shí)候我彩繪全部UnLoad,有效降低內(nèi)存使用,不會產(chǎn)生任何內(nèi)存泄露。

同樣基于剛才的算法,增加一個索引表,增加一個索引計(jì)數(shù),做一些++和--的操作,直到Index為零的時(shí)候才釋放Bundle。

另外這是網(wǎng)絡(luò)更新,大家做網(wǎng)絡(luò)更新很多人還用U3D提供的3W接口下載,很早的時(shí)候一直采用那個接口,大概4年前到5年前做過一款3D的ARPU,當(dāng)時(shí)我要滿足我的腳本跨平臺,要保證足夠的效率,解決一些崩潰性的問題,那個時(shí)候自己基于HTV接口實(shí)現(xiàn)3G緩沖下載,下載中會在內(nèi)存中存放小的斷點(diǎn)內(nèi)存數(shù)據(jù),之間的去寫數(shù)據(jù),然后當(dāng)這個小的斷點(diǎn)數(shù)據(jù)拿到內(nèi)存值寫到硬盤,之后下載到本地,下載完成跟本地文件進(jìn)行拼接,在中間的小內(nèi)存處理過程中會定期的去清理我的緩存,我知道大家有很多其他的接口可以完成緩存,但內(nèi)存開銷比較大。

unity 游戲 開發(fā)(6年Unity經(jīng)驗(yàn)老司機(jī):我們是如何做引擎和項(xiàng)目優(yōu)化的)

我會開一個多線程去下載,這個下載效率我經(jīng)過以前在CDA測試,可能不是太權(quán)威的測試,性能可以提升大概30%到50%,另外就是Json數(shù)據(jù)優(yōu)化,那時(shí)候網(wǎng)絡(luò)很差,都是3G和2G,那時(shí)候?qū)儆诙踢B接的狀態(tài),發(fā)現(xiàn)最大的問題就是數(shù)據(jù)量很大,每次大家要等很久的時(shí)候,后面我做序列化壓縮,壓縮算法很簡單,我每一次遇到List相關(guān)的我只保留第一個值,多余的相同的全部隱藏,這樣當(dāng)數(shù)據(jù)量比較大的時(shí)候,我們平均大概能優(yōu)化70%的量。

另外就是一些渲染性能,我們?nèi)绻蠹易罱谟肬3D5.4Beta版本可以發(fā)現(xiàn)里面增加很多接口,比如說GPU,當(dāng)時(shí)在我們使用的版本中是沒有的,當(dāng)時(shí)遇到了很多渲染性能的問題,因?yàn)楫?dāng)時(shí)的項(xiàng)目要求就是效果要好,畫面要極致,但要流暢,所以當(dāng)時(shí)做了很多擴(kuò)展。

有過開發(fā)經(jīng)驗(yàn)的人比較清楚我們的做法,基本上是進(jìn)他們進(jìn)行各種類型的合并。包括UV包括Texture。因?yàn)楫?dāng)時(shí)合并貼圖性能非常差,我們當(dāng)時(shí)是在網(wǎng)格合并索引合并頂點(diǎn)顏色的操作都是很快速完成,但貼圖的合并當(dāng)時(shí)是非常非常的延遲,那個時(shí)候我沒有辦法,就開始做一些C++擴(kuò)展,在這里我們建了一個共享線程,用GPU實(shí)現(xiàn)貼圖拼接,然后他是一個異步進(jìn)行的,渲染過程中可能會有很多模型,但是可能在一開始進(jìn)行的時(shí)候會有點(diǎn)慢,但你加載過程之后可能大概幾秒之后會把他合成一個周扣,就瞬間性能提升下來,如果5.4大家可以去看U3D的接口,應(yīng)該跟這個類似的算法。

有針對性的去使用著色器,在去年和前年的時(shí)候我在北京很多游戲公司的工程師還有老板去找過我,就說我們的游戲就性能很差,就是很多的機(jī)器跑不起來,或者很多的跑的不流暢,突然到某個角落的時(shí)候就開始卡了一下,我一般去到他們公司第一件事情看他們的文件夾,就說你的著色器到底有多少,美術(shù)使用多少,因?yàn)樵谥袊鴣碚f很多美術(shù)的經(jīng)驗(yàn)比較少的,可能對技術(shù)對渲染了解并不是太多,比如像一些可以用多少網(wǎng)格,多少三角形,有多少頂點(diǎn),多少張貼圖,場景可以做多大,我要占多少內(nèi)存,其實(shí)這種有數(shù)據(jù)指標(biāo)的東西比較好掌握合理解,但是涉及渲染的時(shí)候,他們用起來開始產(chǎn)生困惑,比如經(jīng)??吹揭恍┕纠锩娴囊恍┯螒颍芎唵蔚囊粋€游戲的模型,他要表達(dá)一個效果,然后他可能會使用很多的寄存器和很多的貼圖,但美術(shù)在使用著色器上只會用幾個參數(shù)和幾張貼圖,那個時(shí)候當(dāng)時(shí)也分析了他們的一些訴求,所以基于他們的渲染需求,我自己寫了很多的著色器方便他們做各種各樣效果,當(dāng)他們效果匹配的時(shí)候,基本上讓他們的著色器達(dá)到最優(yōu)化,分析ALU,讓他每次的每個使用是最優(yōu)化的,不會有多余浪費(fèi)和冗余。

我也是參考了一些插件中,一大部分是我自己寫的,另外就是地形系統(tǒng),最早我們就發(fā)現(xiàn)網(wǎng)格數(shù)比較大,比較浪費(fèi),雖然地刷很好用,那個時(shí)候就包括LED都很好用,但唯一一個就是最早的時(shí)候網(wǎng)格非常多,當(dāng)時(shí)開使用一些自己創(chuàng)建的一些地形,地形模型去在場景擺放,擺放過程中發(fā)現(xiàn)他沒有貼圖混合功能,然后我當(dāng)時(shí)就是有分析U3D的系統(tǒng),自己去開發(fā)了一個BlendShader還有地表混合著色器,我們的植被是可以刷的,樹干地表石頭都可以采取Blend繪制,然后整個模型只有一個,網(wǎng)格數(shù)也是非常稀少的。

我以前去做一些游戲邏輯和人工智能,大家現(xiàn)在都知道大家都在寫腳本,但基本上我當(dāng)時(shí)也做過開發(fā),比如一些內(nèi)存加密等等,但是依然解決不了就開發(fā)的時(shí)候很多漏洞和調(diào)試問題,尤其是人工智能這一塊,我想實(shí)現(xiàn)一個流程在引擎中,那個時(shí)候Animator出來了,利用這個狀態(tài)圖實(shí)現(xiàn)有線狀態(tài)機(jī),這些狀態(tài)機(jī)的腳本都在本地里面存著,我只需要更新服務(wù)器上的小怪的AI,也是可以的。

另外是代碼安全的問題,就是現(xiàn)在因?yàn)榇蠹叶贾篮芏嗟奈覀冮_發(fā)一些游戲發(fā)布出去,經(jīng)常會有反BA的工具把我們反BA掉,當(dāng)時(shí)也是發(fā)了很多文檔,最后找到Mono虛擬機(jī)的原碼,同樣開發(fā)DLL也進(jìn)行了重新編譯,基本上可以進(jìn)行加密,最后發(fā)布到Application中。

目前現(xiàn)在開始用另外的方法來做,這是比較老的一個方法,另外兼容和適配,最早做游戲的時(shí)候還是,為了覆蓋大部分的安卓機(jī)型,需要做一個很復(fù)雜的兼容適配,發(fā)現(xiàn)比任何代碼和算法都解決不了多機(jī)型適配問題,那個時(shí)候開使用大數(shù)據(jù),將所有的機(jī)型配置分級別,對他們所用的配置,數(shù)據(jù)的話會直接存到服務(wù)器端,第一次登陸打開游戲的時(shí)候,會把機(jī)型發(fā)送到服務(wù)器上,服務(wù)器根據(jù)我本地的配置在服務(wù)器尋找相關(guān)的配置資源,游戲打開的時(shí)候自動的幫玩家適配好,根據(jù)機(jī)型最優(yōu)化的表現(xiàn)方式。

希望大家在目前的話VR還是一個起步階段,我們還是非常缺內(nèi)容的平臺,希望更多的開發(fā)者加入VR開發(fā),我們也希望能幫助開發(fā)者一起去創(chuàng)造一個中國VR互聯(lián)網(wǎng)的環(huán)境。謝謝大家。

unity 游戲 開發(fā)(6年Unity經(jīng)驗(yàn)老司機(jī):我們是如何做引擎和項(xiàng)目優(yōu)化的)

熱門課程推薦

熱門資訊

請綁定手機(jī)號

x

同學(xué)您好!

您已成功報(bào)名0元試學(xué)活動,老師會在第一時(shí)間與您取得聯(lián)系,請保持電話暢通!
確定