Unity3D开发基础组件提取总结
在游戲開發(fā)過程中,除了邏輯功能的開發(fā)之外,還有非常多基礎(chǔ)的模塊。這些模塊,對(duì)大部分手機(jī)網(wǎng)絡(luò)游戲來說都是一樣的。所以,在上個(gè)游戲已經(jīng)上線運(yùn)營大半年之際,我認(rèn)為有必要將這些模塊整理出來。讓后面其它游戲的開發(fā),能夠不用從0開始。該游戲client採用Unity3D開發(fā),那么我們這里抽取的基礎(chǔ)組件也就是針對(duì)Unity3D引擎來的。
簡單的梳理之后,我發(fā)現(xiàn)主要有下面一些模塊,能夠獨(dú)立抽取出來,當(dāng)然各個(gè)模塊之間也有一個(gè)依賴關(guān)系。比方日志模塊,差點(diǎn)兒是全部模塊都須要依賴的。
1、日志模塊
游戲開發(fā)中,我們避免不了日志打印,由于有些時(shí)候。我們須要輸出一些信息或者進(jìn)行一些調(diào)試。
所以。一個(gè)方便的日志組件能夠事半功倍。當(dāng)然,你也能夠直接使用unity自有的Debug.Log。
可是我們希望抽象出來一套日志接口。為了更方便的控制和擴(kuò)展。
2、資源讀取模塊
游戲開發(fā)中。我們有非常多的資源。包含lua腳本,游戲配置表,assetbundle等。
在研發(fā)的過程中,資源的改變是常事。所以,在研發(fā)的過程中,我們直接讀取本地的資源。這樣假設(shè)資源進(jìn)行改變之后。里面就能夠反映在Unity編輯器中。上線或者內(nèi)部提供的Debug版本號(hào),我們採用資源更新的方式,同一時(shí)候,我們會(huì)將資源碎文件打包到一個(gè)歸檔文件(MPQ)文件里。然后游戲須要資源的時(shí)候,會(huì)從MPQ歸檔文件里讀取。
所以,我們的資源讀取模塊,主要提供一個(gè)統(tǒng)一的資源讀取接口,調(diào)用者不用考慮當(dāng)前資源是從本地文件還是MPQ歸檔文件里讀取到的。
3、資源更新模塊
手機(jī)網(wǎng)游在玩家啟動(dòng)游戲之后。會(huì)有一個(gè)資源更新檢查,假設(shè)有資源更新,則下載須要更新的資源。這也是如今主流網(wǎng)絡(luò)游戲的開發(fā)模式。主要避免頻繁的更換client。資源更新模塊邏輯比較單一,就是獲取server一個(gè)清單文件,然后依據(jù)清單文件,下載全部須要下載的資源文件。為了更好的體驗(yàn)。我們支持?jǐn)帱c(diǎn)下載。
4、本地資源解壓模塊
當(dāng)我們首次發(fā)包的時(shí)候,我們通常會(huì)把全資源打到終于的包中。這樣也是為了讓用戶下載完畢之后,不用再次更新一個(gè)非常大的資源。后面緊緊在有須要更新的時(shí)候,才採用增量更新的方式進(jìn)行下載。所以,第一次我們將資源放在終于的包中。我們須要將資源解壓到一個(gè)可讀寫的存儲(chǔ)文件夾。后面增量更新的時(shí)候。我們下載的資源也一樣放在這個(gè)位置。
5、UI狀態(tài)管理
網(wǎng)絡(luò)游戲中。有非常多UI時(shí)。我們須要對(duì)打開的UI和UI跳轉(zhuǎn)進(jìn)行管理。
我們能夠採用一種相似狀態(tài)機(jī)的方式來管理UI。以及完畢UI界面的切換
6、Socket/Http通信組件。以及協(xié)議相關(guān)組件
網(wǎng)絡(luò)游戲,自然少不了和server的通信。如今我們一般採用socket長鏈接的方式。當(dāng)然。如今手機(jī)游戲的開發(fā)。也有非常多採用Http的方式,也有非常多游戲中兩種方式都存在。
7、lua集成
如今為了做熱更新,一般游戲邏輯,我們採用lua來開發(fā)。
所以。我們須要繼承l(wèi)ua。如今集成lua能夠有非常多選擇。什么ulua。kopielua,slua等。這里都是大同小異,看自己的選擇吧。關(guān)鍵能夠做一個(gè)簡單的封裝,讓lua邏輯的編寫採用統(tǒng)一的格式。
8、UI控件事件的封裝,方便lua中使用
依據(jù)你選擇的lua插件,能夠?qū)I中的事件做一些簡單的封裝。使得事件和回調(diào)在lua中能夠更方便的處理
9、MPQ資源打包和讀取組件
之前。我們說過。為了降低碎文件。我們?cè)诠荚隽扛碌馁Y源的時(shí)候,我們首先將全部須要增量更新的資源。打進(jìn)一個(gè)mpq歸檔文件里。
所以,我們須要兩個(gè)組件。一個(gè)是MPQ打包工具,另一個(gè)C#中MPQ文件讀取組件。
10、多語言文本文件處理
隨著游戲的火熱,我們對(duì)海外渠道的支持,也是能夠預(yù)見的發(fā)展。
所以。我們?cè)陂_發(fā)的時(shí)候,就須要想好多語言的支持。這里除了unity本身模型和紋理等的支持,我們另一類比方游戲中各種tip提示等,也須要做多語言支持。?
11、渠道SDK統(tǒng)一API
國內(nèi)大環(huán)境是上線時(shí)有N個(gè)渠道SDK須要接入。這里我們?cè)赨nity中抽象出一套統(tǒng)一的調(diào)用接口。屏蔽android和ios等平臺(tái)的差異,然后提供android平臺(tái)的支持,和ios平臺(tái)的支持。至于SDK本身的接入。和渠道包的打包等我們採用U8SDK的方式來做。
12、對(duì)象池
手機(jī)游戲?qū)τ谟脩趔w驗(yàn)有著較高的要求,所以我們?cè)谟螒蜷_發(fā)過程中,須要採用一定的技術(shù)來緩存一些經(jīng)常使用的組件,讓游戲的性能體驗(yàn)更加完好。
這里。方案之中的一個(gè)就是採用對(duì)象池技術(shù)。
對(duì)象池本身的實(shí)現(xiàn)和詳細(xì)的游戲無關(guān),能夠獨(dú)立成一個(gè)組件
13、AssetBundle管理
游戲中,之前我們說過。我們是將資源打包成assetbundle。然后通過熱更新下來。
所以,游戲中我們須要從assetbundle中完畢資源的讀取和實(shí)例化。
所以。為了更方便更好地讀取資源。我們能夠?qū)ssetbundle進(jìn)行統(tǒng)一的管理
14、其它基礎(chǔ)組件和相關(guān)經(jīng)常使用函數(shù)的整理
游戲開發(fā)中還有非常多其它經(jīng)常使用的輔助函數(shù)等,我們也能夠提取出來。 比方unity單例,多線程同步。MD5。IO操作等。
這些就是眼下整理出來的一些比較通用的點(diǎn),也希望通過這個(gè)整理,讓后面新游戲的開發(fā),有一個(gè)略微基礎(chǔ)的起步。不用從0開始。 整理完畢之后。我們大概的代碼結(jié)構(gòu)例如以下:
后面。我會(huì)將各個(gè)組件的實(shí)現(xiàn)大概說一下,也當(dāng)給自己做一個(gè)紀(jì)錄。這套東西。后面隨著時(shí)間的推移和經(jīng)驗(yàn)的積累,可能還會(huì)增加很多其它的功能。
總結(jié)
以上是生活随笔為你收集整理的Unity3D开发基础组件提取总结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CCF NOI1029 信息加密
- 下一篇: 《Spark与Hadoop大数据分析》一