unity游戏框架学习-框架结构
轉(zhuǎn)眼畢業(yè)三年了,算上實(shí)習(xí)差不多四年的游戲開發(fā)了,一直想自己鼓搗套框架,奈何能力太次,不知道從哪開始。但是萬(wàn)事開頭難,總要踏出第一步,才會(huì)有后面的兩步,三步…
我認(rèn)為的unity游戲框架就是一整套的工具和規(guī)范,框架部分提供項(xiàng)目中使用的基礎(chǔ)設(shè)施,包括資源管理、網(wǎng)絡(luò)通信、UI框架、消息管理、場(chǎng)景管理、數(shù)據(jù)解析及存取等,同時(shí)定義了一系列規(guī)范包括編碼的,例如參數(shù)命名、縮進(jìn),以及行為準(zhǔn)則,例如加載場(chǎng)景必須用框架的xxx接口,貼圖必須放在xxx文件夾下等。
這篇是第一篇,先簡(jiǎn)單介紹下框架所包含的內(nèi)容吧。
一、首先,我們框架是由多個(gè)不同的模塊組成的,所以,我們需要一個(gè)模塊的管理類ModuleManager,該類負(fù)責(zé)各個(gè)模塊的初始化、維護(hù)模塊實(shí)例的引用窗口,以及update函數(shù)負(fù)責(zé)模塊的更新
public void Update() {if(!m_bIsInit){return;}// 初始化完就可以走C#層的模塊updatefor (int i = 0; i < m_Modules.Count; ++i){m_Modules[i].Update(Time.deltaTime);} }二、我們打開游戲以后,用戶需要更新、登錄以后才能體驗(yàn)游戲的內(nèi)容。
登錄模塊:https://www.cnblogs.com/wang-jin-fu/p/10979719.html
所以我們要有一個(gè)登錄模塊LoginModule,該模塊負(fù)責(zé)從進(jìn)入游戲main場(chǎng)景前的加載和登錄過程
LoginModule需要完成按照順序如下:
1.建立網(wǎng)絡(luò)連接,如果沒有網(wǎng)絡(luò)彈出提示框,否則跳轉(zhuǎn)到步驟2
2.擴(kuò)展包更新。android端需要先檢查擴(kuò)展包是否需要更新,如果要更新,檢查內(nèi)存是否足夠,內(nèi)存不足彈出提示框,否則跳轉(zhuǎn)步驟3
3.解壓擴(kuò)展包。如果要解壓,檢查內(nèi)存是否足夠,內(nèi)存不足彈出提示框,否則跳轉(zhuǎn)4
4.熱更。
(1)獲取服務(wù)端版本號(hào)文件,如果需要強(qiáng)更,跳轉(zhuǎn)到應(yīng)用商店,如果需要更新,跳轉(zhuǎn)下一步,否則跳轉(zhuǎn)步驟5
(2)獲取服務(wù)端md5文件,對(duì)比本地md5,獲取需要更新的ab包列表
(3)下載并解壓需要更新的ab包,這邊需要檢查內(nèi)存是否足夠,內(nèi)存不足彈出提示框
5.更新結(jié)束。登錄sdk如騰訊賬號(hào),獲取賬號(hào)狀態(tài),如封號(hào),彈出提示,否則跳轉(zhuǎn)步驟6
6.登錄游戲服務(wù)器(簡(jiǎn)稱游服),獲取游戲狀態(tài),如在維護(hù)狀態(tài),彈出提示,否則跳轉(zhuǎn)步驟7
7.新手引導(dǎo)(順序跟步驟8可以對(duì)換。看情況)
8.預(yù)加載資源(可無,看情況),預(yù)加載結(jié)束跳轉(zhuǎn)步驟9
9.請(qǐng)求服務(wù)端初始化數(shù)據(jù)(如main場(chǎng)景要顯示內(nèi)容需要的數(shù)據(jù)、小紅點(diǎn)等),初始數(shù)據(jù)都接收完畢跳轉(zhuǎn)步驟10
10.切換到mian場(chǎng)景,打開主界面
三、sdk模塊。游戲更新完畢后,我們開始登錄游戲了。SDKModule模塊負(fù)責(zé)的內(nèi)容包括:
sdk模塊:https://www.cnblogs.com/wang-jin-fu/p/11017653.html
1.賬號(hào)類:創(chuàng)建、登錄、切換
2.充值
3.外部分享
4.打開外部鏈接,如論壇、社區(qū)等
四、sdk登錄完畢,通過sdk返回的用戶信息前面連接我們的游服,這就需要一個(gè)專門的模塊Socket負(fù)責(zé)和游服的通信,包括網(wǎng)絡(luò)的連接、消息的接收、心跳包的發(fā)送、斷線重連的監(jiān)聽和處理
https://www.cnblogs.com/wang-jin-fu/p/11121654.html
五、用戶登錄結(jié)束了,我們可以進(jìn)入主城了,這時(shí)候就需要用到場(chǎng)景模塊SceneModule切換場(chǎng)景了,SceneModule主要完成以下工作
https://www.cnblogs.com/wang-jin-fu/p/11128974.html
1.場(chǎng)景的加載、卸載、切換
2.加載新的場(chǎng)景時(shí)需要卸載舊場(chǎng)景的的資源,清除GC
3.支持場(chǎng)景資源的預(yù)加載
六、前面說到的預(yù)加載資源,用什么來加載呢,我們需要一個(gè)資源管理器LoadModule,這是最主要的一個(gè)模塊,我們來看看該模塊的功能
資源管理:https://www.cnblogs.com/wang-jin-fu/p/11189323.html
資源加載:https://www.cnblogs.com/wang-jin-fu/p/11218659.html
AssetBundle:https://www.cnblogs.com/wang-jin-fu/p/11171626.html
1.加載資源,包括從本地加載、從ab包加載、從網(wǎng)絡(luò)下載,而ab包的加載是其中最麻煩的地方了(ab包依賴、冗余)
2.ab包的加載,包括mainfest的加載和依賴的加載
3.資源、ab包的緩存和卸載:引入引用計(jì)數(shù)和銷毀計(jì)時(shí)(沒有資源引用且非常駐資源且銷毀計(jì)時(shí)結(jié)束接可以回收了)
4.不同資源類型的加載。如圖片、音頻、預(yù)制體、場(chǎng)景、配置表等
七、終于進(jìn)入內(nèi)城了,是時(shí)候打開ui界面了,UIModule用于管理我們的ui界面,該模塊需要實(shí)現(xiàn)以下功能:
ui框架:https://www.cnblogs.com/wang-jin-fu/p/11252256.html
1.界面的加載、卸載
2.打開、關(guān)閉、隱藏、顯示界面,這邊隱藏是指界面被遮擋的意思,一般來說,界面被遮住時(shí),應(yīng)該關(guān)閉界面的更新
3.界面棧的管理,主要是用于場(chǎng)景切換時(shí)需要回到上一個(gè)場(chǎng)景打開的界面棧
4.界面的基類:彈窗、全屏窗口
5.需要的功能:圖片鏡像(節(jié)省資源)、滑動(dòng)列表(復(fù)用)、模糊背景等
八、前面說到的資源需要復(fù)用,UI需要復(fù)用,那就需要一個(gè)通用的對(duì)象池用來管理我們的對(duì)象啦
九、我們都知道MVC框架,核心是分隔view和module層,在我們的框架就是view和view之間,View和module之間不直接引用對(duì)象,那要怎么通信的,這時(shí)候就需要一個(gè)消息機(jī)制了
消息系統(tǒng):https://www.cnblogs.com/wang-jin-fu/p/11255831.html
1.添加、移除事件的方法
2.需要觸發(fā)事件的方法
3.Lua端的消息機(jī)制
4.c#端的消息機(jī)制
十、程序員嘛,就是來寫bug的。有bug不可怕,沒日志就難受了,一個(gè)好的日志系統(tǒng)可以幫助我們更快速的定位到bug的位置。
日志系統(tǒng):https://www.cnblogs.com/wang-jin-fu/p/11263310.html
1.日志開關(guān)。只有開發(fā)版本開啟,因?yàn)槿罩具€是比較耗性能的。。。
2.堆棧日志界面:ERROR時(shí)彈出界面,該界面顯示錯(cuò)誤的堆棧日志。方便qa測(cè)試時(shí)查看日志
3.FPS幀率的顯示
4.游戲正式上線以后,我們很難拿到用戶的錯(cuò)誤日志,這時(shí)候我們需要把錯(cuò)誤的日志上傳到我們的服務(wù)器
5.當(dāng)游戲崩潰時(shí)我們是拿不到unity打印的日志的,這時(shí)候就需要接入FireBase了,它可以幫我們把崩潰的詳細(xì)日志上傳到網(wǎng)頁(yè)上,方便我們查看
十一、音樂模塊,用于管理音樂(bgm、音效)的播放、暫停,因?yàn)橐魳肺募写騛b包,所以需統(tǒng)一的接口去管理
十二、用戶設(shè)置,例如王者榮耀里,當(dāng)你選擇一個(gè)英雄并進(jìn)入游戲后,下一次選擇英雄他會(huì)記住你上一次的出裝、天賦、皮膚等內(nèi)容,還有就是玩家可以打開、關(guān)閉游戲音效
用戶設(shè)置系統(tǒng):https://www.cnblogs.com/wang-jin-fu/p/11256071.html
1.本地設(shè)置,設(shè)置存儲(chǔ)在本地,更換設(shè)備就失效了,一般存成\json\xml或unity的PlayerPrefs
2.保存服務(wù)端,設(shè)置上傳到服務(wù)器,這樣更換設(shè)備也不影響設(shè)置
十三、終于,終于我們游戲做好了,要打包了~,命令行一鍵打包了解下? 哈哈哈
一鍵打包:https://www.cnblogs.com/wang-jin-fu/p/11242450.html
1.命令行參數(shù)解析,命令的參數(shù)包括平臺(tái)、是否打ab包、是否重新導(dǎo)出、版本號(hào)、版本類型(develop\release)等等你想配置的參數(shù)
2.設(shè)置圖集名字,防止項(xiàng)目成員不按規(guī)則設(shè)置圖集
3.設(shè)置ab包名字、打ab包、壓縮ab包(熱更包過大用戶容易流失)
4.生成md5,對(duì)比舊的md5,上傳需要更新的ab包和新的md5文件到服務(wù)器
5.導(dǎo)出unity工程
6.打包。ios使用xcode打ipa,android使用android studio打apk
7.發(fā)布版本,測(cè)試包發(fā)布到叮叮群,正式包由運(yùn)營(yíng)上傳到應(yīng)用商店(運(yùn)營(yíng)很棒)
十四、編輯器工具,工欲善其事,必先利其器,所以工具必不可少
1.圖集檢查工具、圖集名字設(shè)置工具
2.ab包名字、依賴檢查工具
3.資源導(dǎo)入檢查設(shè)置
4.配置、服務(wù)器協(xié)議同步工具
十五、性能優(yōu)化
1.CPU
2.GPU
3.ui優(yōu)化,包括dc和界面打開速度
4.uwa接入
?
?
?
好了,大概就這些吧,這篇是概述,后續(xù)會(huì)針對(duì)每個(gè)模塊進(jìn)行詳細(xì)的說明,也希望讀者可以幫我指出不足
?
轉(zhuǎn)載于:https://www.cnblogs.com/wang-jin-fu/p/10975660.html
總結(jié)
以上是生活随笔為你收集整理的unity游戏框架学习-框架结构的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: UVALive 6467Strahler
- 下一篇: Maven项目整合讲义(Eclipse版