轉眼畢業三年了,算上實習差不多四年的游戲開發了,一直想自己鼓搗套框架,奈何能力太次,不知道從哪開始。但是萬事開頭難,總要踏出第一步,才會有后面的兩步,三步…
我認為的unity游戲框架就是一整套的工具和規范,框架部分提供項目中使用的基礎設施,包括資源管理、網絡通信、UI框架、消息管理、場景管理、數據解析及存取等,同時定義了一系列規范包括編碼的,例如參數命名、縮進,以及行為准則,例如加載場景必須用框架的xxx接口,貼圖必須放在xxx文件夾下等。
這篇是第一篇,先簡單介紹下框架所包含的內容吧。
一、首先,我們框架是由多個不同的模塊組成的,所以,我們需要一個模塊的管理類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); } }
二、我們打開游戲以后,用戶需要更新、登錄以后才能體驗游戲的內容。
登錄模塊:https://www.cnblogs.com/wang-jin-fu/p/10979719.html
所以我們要有一個登錄模塊LoginModule,該模塊負責從進入游戲main場景前的加載和登錄過程
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場景,打開主界面
三、sdk模塊。游戲更新完畢后,我們開始登錄游戲了。SDKModule模塊負責的內容包括:
sdk模塊:https://www.cnblogs.com/wang-jin-fu/p/11017653.html
1.賬號類:創建、登錄、切換
2.充值
3.外部分享
4.打開外部鏈接,如論壇、社區等
四、sdk登錄完畢,通過sdk返回的用戶信息前面連接我們的游服,這就需要一個專門的模塊Socket負責和游服的通信,包括網絡的連接、消息的接收、心跳包的發送、斷線重連的監聽和處理
https://www.cnblogs.com/wang-jin-fu/p/11121654.html
五、用戶登錄結束了,我們可以進入主城了,這時候就需要用到場景模塊SceneModule切換場景了,SceneModule主要完成以下工作
https://www.cnblogs.com/wang-jin-fu/p/11128974.html
1.場景的加載、卸載、切換
2.加載新的場景時需要卸載舊場景的的資源,清除GC
3.支持場景資源的預加載
六、前面說到的預加載資源,用什么來加載呢,我們需要一個資源管理器LoadModule,這是最主要的一個模塊,我們來看看該模塊的功能
資源管理: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包加載、從網絡下載,而ab包的加載是其中最麻煩的地方了(ab包依賴、冗余)
2.ab包的加載,包括mainfest的加載和依賴的加載
3.資源、ab包的緩存和卸載:引入引用計數和銷毀計時(沒有資源引用且非常駐資源且銷毀計時結束接可以回收了)
4.不同資源類型的加載。如圖片、音頻、預制體、場景、配置表等
七、終於進入內城了,是時候打開ui界面了,UIModule用於管理我們的ui界面,該模塊需要實現以下功能:
ui框架:https://www.cnblogs.com/wang-jin-fu/p/11252256.html
1.界面的加載、卸載
2.打開、關閉、隱藏、顯示界面,這邊隱藏是指界面被遮擋的意思,一般來說,界面被遮住時,應該關閉界面的更新
3.界面棧的管理,主要是用於場景切換時需要回到上一個場景打開的界面棧
4.界面的基類:彈窗、全屏窗口
5.需要的功能:圖片鏡像(節省資源)、滑動列表(復用)、模糊背景等
八、前面說到的資源需要復用,UI需要復用,那就需要一個通用的對象池用來管理我們的對象啦
九、我們都知道MVC框架,核心是分隔view和module層,在我們的框架就是view和view之間,View和module之間不直接引用對象,那要怎么通信的,這時候就需要一個消息機制了
消息系統:https://www.cnblogs.com/wang-jin-fu/p/11255831.html
1.添加、移除事件的方法
2.需要觸發事件的方法
3.Lua端的消息機制
4.c#端的消息機制
十、程序員嘛,就是來寫bug的。有bug不可怕,沒日志就難受了,一個好的日志系統可以幫助我們更快速的定位到bug的位置。
日志系統:https://www.cnblogs.com/wang-jin-fu/p/11263310.html
1.日志開關。只有開發版本開啟,因為日志還是比較耗性能的。。。
2.堆棧日志界面:ERROR時彈出界面,該界面顯示錯誤的堆棧日志。方便qa測試時查看日志
3.FPS幀率的顯示
4.游戲正式上線以后,我們很難拿到用戶的錯誤日志,這時候我們需要把錯誤的日志上傳到我們的服務器
5.當游戲崩潰時我們是拿不到unity打印的日志的,這時候就需要接入FireBase了,它可以幫我們把崩潰的詳細日志上傳到網頁上,方便我們查看
十一、音樂模塊,用於管理音樂(bgm、音效)的播放、暫停,因為音樂文件有打ab包,所以需統一的接口去管理
十二、用戶設置,例如王者榮耀里,當你選擇一個英雄並進入游戲后,下一次選擇英雄他會記住你上一次的出裝、天賦、皮膚等內容,還有就是玩家可以打開、關閉游戲音效
用戶設置系統:https://www.cnblogs.com/wang-jin-fu/p/11256071.html
1.本地設置,設置存儲在本地,更換設備就失效了,一般存成\json\xml或unity的PlayerPrefs
2.保存服務端,設置上傳到服務器,這樣更換設備也不影響設置
十三、終於,終於我們游戲做好了,要打包了~,命令行一鍵打包了解下 哈哈哈
一鍵打包:https://www.cnblogs.com/wang-jin-fu/p/11242450.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.發布版本,測試包發布到叮叮群,正式包由運營上傳到應用商店(運營很棒)
十四、編輯器工具,工欲善其事,必先利其器,所以工具必不可少
1.圖集檢查工具、圖集名字設置工具
2.ab包名字、依賴檢查工具
3.資源導入檢查設置
4.配置、服務器協議同步工具
十五、性能優化
1.CPU
2.GPU
3.ui優化,包括dc和界面打開速度
4.uwa接入
好了,大概就這些吧,這篇是概述,后續會針對每個模塊進行詳細的說明,也希望讀者可以幫我指出不足