轉眼畢業三年了,算上實習差很少四年的遊戲開發了,一直想本身鼓搗套框架,奈何能力太次,不知道從哪開始。可是萬事開頭難,總要踏出第一步,纔會有後面的兩步,三步…html
我認爲的unity遊戲框架就是一整套的工具和規範,框架部分提供項目中使用的基礎設施,包括資源管理、網絡通訊、UI框架、消息管理、場景管理、數據解析及存取等,同時定義了一系列規範包括編碼的,例如參數命名、縮進,以及行爲準則,例如加載場景必須用框架的xxx接口,貼圖必須放在xxx文件夾下等。android
這篇是第一篇,先簡單介紹下框架所包含的內容吧。ios
1、首先,咱們框架是由多個不一樣的模塊組成的,因此,咱們須要一個模塊的管理類ModuleManager,該類負責各個模塊的初始化、維護模塊實例的引用窗口,以及update函數負責模塊的更新程序員
public void Update() { if(!m_bIsInit) { return; } // 初始化完就能夠走C#層的模塊update for (int i = 0; i < m_Modules.Count; ++i) { m_Modules[i].Update(Time.deltaTime); } }
2、咱們打開遊戲之後,用戶須要更新、登陸之後才能體驗遊戲的內容。json
登陸模塊:http://www.javashuo.com/article/p-dergpfsi-s.htmlc#
因此咱們要有一個登陸模塊LoginModule,該模塊負責從進入遊戲main場景前的加載和登陸過程xcode
LoginModule須要完成按照順序以下:緩存
1.創建網絡鏈接,若是沒有網絡彈出提示框,不然跳轉到步驟2性能優化
2.擴展包更新。android端須要先檢查擴展包是否須要更新,若是要更新,檢查內存是否足夠,內存不足彈出提示框,不然跳轉步驟3服務器
3.解壓擴展包。若是要解壓,檢查內存是否足夠,內存不足彈出提示框,不然跳轉4
4.熱更。
(1)獲取服務端版本號文件,若是須要強更,跳轉到應用商店,若是須要更新,跳轉下一步,不然跳轉步驟5
(2)獲取服務端md5文件,對比本地md5,獲取須要更新的ab包列表
(3)下載並解壓須要更新的ab包,這邊須要檢查內存是否足夠,內存不足彈出提示框
5.更新結束。登陸sdk如騰訊帳號,獲取帳號狀態,如封號,彈出提示,不然跳轉步驟6
6.登陸游戲服務器(簡稱遊服),獲取遊戲狀態,如在維護狀態,彈出提示,不然跳轉步驟7
7.新手引導(順序跟步驟8能夠對換。看狀況)
8.預加載資源(可無,看狀況),預加載結束跳轉步驟9
9.請求服務端初始化數據(如main場景要顯示內容須要的數據、小紅點等),初始數據都接收完畢跳轉步驟10
10.切換到mian場景,打開主界面
3、sdk模塊。遊戲更新完畢後,咱們開始登陸游戲了。SDKModule模塊負責的內容包括:
sdk模塊:http://www.javashuo.com/article/p-sosmwerk-r.html
1.帳號類:建立、登陸、切換
2.充值
3.外部分享
4.打開外部連接,如論壇、社區等
4、sdk登陸完畢,經過sdk返回的用戶信息前面鏈接咱們的遊服,這就須要一個專門的模塊Socket負責和遊服的通訊,包括網絡的鏈接、消息的接收、心跳包的發送、斷線重連的監聽和處理
http://www.javashuo.com/article/p-xmakzplx-e.html
5、用戶登陸結束了,咱們能夠進入主城了,這時候就須要用到場景模塊SceneModule切換場景了,SceneModule主要完成如下工做
http://www.javashuo.com/article/p-nsinwqpv-e.html
1.場景的加載、卸載、切換
2.加載新的場景時須要卸載舊場景的的資源,清除GC
3.支持場景資源的預加載
6、前面說到的預加載資源,用什麼來加載呢,咱們須要一個資源管理器LoadModule,這是最主要的一個模塊,咱們來看看該模塊的功能
資源管理:http://www.javashuo.com/article/p-ajtqfwig-s.html
資源加載:http://www.javashuo.com/article/p-nodnonev-g.html
AssetBundle:http://www.javashuo.com/article/p-kxvvqcjh-e.html
1.加載資源,包括從本地加載、從ab包加載、從網絡下載,而ab包的加載是其中最麻煩的地方了(ab包依賴、冗餘)
2.ab包的加載,包括mainfest的加載和依賴的加載
3.資源、ab包的緩存和卸載:引入引用計數和銷燬計時(沒有資源引用且很是駐資源且銷燬計時結束接能夠回收了)
4.不一樣資源類型的加載。如圖片、音頻、預製體、場景、配置表等
7、終於進入內城了,是時候打開ui界面了,UIModule用於管理咱們的ui界面,該模塊須要實現如下功能:
ui框架:http://www.javashuo.com/article/p-mmolsyet-r.html
1.界面的加載、卸載
2.打開、關閉、隱藏、顯示界面,這邊隱藏是指界面被遮擋的意思,通常來講,界面被遮住時,應該關閉界面的更新
3.界面棧的管理,主要是用於場景切換時須要回到上一個場景打開的界面棧
4.界面的基類:彈窗、全屏窗口
5.須要的功能:圖片鏡像(節省資源)、滑動列表(複用)、模糊背景等
8、前面說到的資源須要複用,UI須要複用,那就須要一個通用的對象池用來管理咱們的對象啦
9、咱們都知道MVC框架,核心是分隔view和module層,在咱們的框架就是view和view之間,View和module之間不直接引用對象,那要怎麼通訊的,這時候就須要一個消息機制了
消息系統:http://www.javashuo.com/article/p-xfmkvzdo-e.html
1.添加、移除事件的方法
2.須要觸發事件的方法
3.Lua端的消息機制
4.c#端的消息機制
10、程序員嘛,就是來寫bug的。有bug不可怕,沒日誌就難受了,一個好的日誌系統能夠幫助咱們更快速的定位到bug的位置。
日誌系統:http://www.javashuo.com/article/p-mkkbpmhn-v.html
1.日誌開關。只有開發版本開啓,由於日誌仍是比較耗性能的。。。
2.堆棧日誌界面:ERROR時彈出界面,該界面顯示錯誤的堆棧日誌。方便qa測試時查看日誌
3.FPS幀率的顯示
4.遊戲正式上線之後,咱們很難拿到用戶的錯誤日誌,這時候咱們須要把錯誤的日誌上傳到咱們的服務器
5.當遊戲崩潰時咱們是拿不到unity打印的日誌的,這時候就須要接入FireBase了,它能夠幫咱們把崩潰的詳細日誌上傳到網頁上,方便咱們查看
11、音樂模塊,用於管理音樂(bgm、音效)的播放、暫停,由於音樂文件有打ab包,因此需統一的接口去管理
12、用戶設置,例如王者榮耀裏,當你選擇一個英雄並進入遊戲後,下一次選擇英雄他會記住你上一次的出裝、天賦、皮膚等內容,還有就是玩家能夠打開、關閉遊戲音效
用戶設置系統:http://www.javashuo.com/article/p-wiqggurn-r.html
1.本地設置,設置存儲在本地,更換設備就失效了,通常存成\json\xml或unity的PlayerPrefs
2.保存服務端,設置上傳到服務器,這樣更換設備也不影響設置
十3、終於,終於咱們遊戲作好了,要打包了~,命令行一鍵打包瞭解下 哈哈哈
一鍵打包:http://www.javashuo.com/article/p-emjxuywz-d.html
1.命令行參數解析,命令的參數包括平臺、是否打ab包、是否從新導出、版本號、版本類型(develop\release)等等你想配置的參數
2.設置圖集名字,防止項目成員不按規則設置圖集
3.設置ab包名字、打ab包、壓縮ab包(熱更包過大用戶容易流失)
4.生成md5,對比舊的md5,上傳須要更新的ab包和新的md5文件到服務器
5.導出unity工程
6.打包。ios使用xcode打ipa,android使用android studio打apk
7.發佈版本,測試包發佈到叮叮羣,正式包由運營上傳到應用商店(運營很棒)
十4、編輯器工具,工欲善其事,必先利其器,因此工具必不可少
1.圖集檢查工具、圖集名字設置工具
2.ab包名字、依賴檢查工具
3.資源導入檢查設置
4.配置、服務器協議同步工具
十5、性能優化
1.CPU
2.GPU
3.ui優化,包括dc和界面打開速度
4.uwa接入
好了,大概就這些吧,這篇是概述,後續會針對每一個模塊進行詳細的說明,也但願讀者能夠幫我指出不足