資源來(lái)源于網(wǎng)絡(luò)”VRunSoftYanlz”
1.Unity3D游戲客戶端基礎(chǔ)框架
?
1.1笤受、Unity3D游戲客戶端游戲框架
一些通用的基礎(chǔ)系統(tǒng)的框架搭建下面,其中包括:
UI框架(UGUI+MVC)
消息管理(Message Manager)
網(wǎng)絡(luò)層框架(Socket + Protobuf)
表格數(shù)據(jù)(Protobuf)
資源管理(Unity5.x的AssetBundle方案)
熱更框架(tolua唠亚,xlua)
?
1.1.1、UI框架
編寫UI框架的意義:
打開、關(guān)閉、層級(jí)镀虐、頁(yè)面跳轉(zhuǎn)等管理問(wèn)題集中化,將外部切換等邏輯交給UIManager處理沟绪。
功能邏輯分散化刮便,每個(gè)頁(yè)面維護(hù)自身邏輯,依托于框架便于多人協(xié)同開發(fā)绽慈,不用關(guān)心跳轉(zhuǎn)和顯示關(guān)閉細(xì)節(jié)恨旱。
通用性框架能夠做到簡(jiǎn)單的代碼復(fù)用和“項(xiàng)目經(jīng)驗(yàn)”沉淀。
基于Unity3D和UGUI實(shí)現(xiàn)的簡(jiǎn)單的UI框架坝疼,實(shí)現(xiàn)內(nèi)容:
1搜贤、加載、顯示裙士、隱藏入客、關(guān)閉頁(yè)面管毙,根據(jù)標(biāo)示獲得相應(yīng)界面實(shí)例腿椎;
2桌硫、提供界面顯示隱藏動(dòng)畫接口;
3啃炸、單獨(dú)界面層級(jí)铆隘,Collider,背景管理南用;
4膀钠、根據(jù)存儲(chǔ)的導(dǎo)航信息完成界面導(dǎo)航;
5裹虫、界面通用對(duì)話框管理肿嘲;
6、便于進(jìn)行需求和功能擴(kuò)展筑公;
?
1.1.2雳窟、消息管理(Message Manager)
一個(gè)消息系統(tǒng)的核心功能:
一個(gè)通用的事件監(jiān)聽器;
管理各個(gè)業(yè)務(wù)監(jiān)聽的事件類型(注冊(cè)和解綁事件監(jiān)聽器)匣屡;
全局廣播事件封救;
廣播事件所傳參數(shù)數(shù)量和數(shù)據(jù)類型都是可變的(數(shù)量可以是0~3,數(shù)據(jù)類型是泛型)
消息管理設(shè)計(jì)思路:在消息系統(tǒng)初始化時(shí)將每個(gè)模塊綁定的消息列表捣作,根據(jù)消息類型分類(用一個(gè)string類型的數(shù)據(jù)類標(biāo)識(shí))誉结,即建立一個(gè)字典Dictionary<string, List<Model>>:每條消息觸發(fā)時(shí)需要通知的模塊列表:某條消息觸發(fā),遍歷字典中綁定的模塊列表券躁。
1.1.3惩坑、網(wǎng)絡(luò)層框架(NetworkManager)
除了單機(jī)游戲,限制絕大多數(shù)的網(wǎng)游都是以強(qiáng)聯(lián)網(wǎng)的方式實(shí)現(xiàn)的嘱朽,選用Socket通信可以實(shí)時(shí)地更新玩家狀態(tài)旭贬。
選定了聯(lián)網(wǎng)方式后,還需要考慮網(wǎng)絡(luò)協(xié)議定制的問(wèn)題搪泳,Protobuf無(wú)疑是個(gè)比較好的選擇稀轨,一方面是跨平臺(tái)特性好,另一方面是數(shù)據(jù)量小可以節(jié)省通信成本岸军。
Socket通信:聯(lián)網(wǎng)方式奋刽、聯(lián)網(wǎng)步驟,數(shù)據(jù)收發(fā)以及協(xié)議數(shù)據(jù)格式艰赞。(加入線程池管理已經(jīng)用一個(gè)隊(duì)列來(lái)管理同時(shí)發(fā)起的請(qǐng)求佣谐,讓Socket請(qǐng)求和接收異步執(zhí)行,基本的思路就是引入多線程和異步等技術(shù)方妖。)
Protobuf網(wǎng)絡(luò)框架主要用途是:數(shù)據(jù)存儲(chǔ)(序列化和反序列化)狭魂,功能類似xml和json等;制作網(wǎng)絡(luò)通信協(xié)議等。(Protobuf不僅可以進(jìn)行excel表格數(shù)據(jù)的導(dǎo)出雌澄,還能直接用于網(wǎng)絡(luò)通信協(xié)議的定制斋泄。)
Protobuf是由Google公司發(fā)布的一個(gè)開源的項(xiàng)目,是一款方便而又通用的數(shù)據(jù)傳輸協(xié)議镐牺。(在Unity中可借助Protobuf來(lái)進(jìn)行數(shù)據(jù)存儲(chǔ)和網(wǎng)絡(luò)協(xié)議兩方面的開發(fā)炫掐。)
1.1.4、表格數(shù)據(jù)
在游戲開發(fā)中睬涧,有很多數(shù)據(jù)是不需要通過(guò)網(wǎng)絡(luò)層從服務(wù)器拉取下來(lái)的募胃,而是通過(guò)表格配置的格式存儲(chǔ)在本地。
游戲中的一個(gè)道具畦浓,通常服務(wù)器只下發(fā)該道具的ID(唯一標(biāo)識(shí))和LV(等級(jí))痹束,然后客戶端從本地?cái)?shù)據(jù)中檢索到該道具的具體屬性值。(通常使用Excel表格來(lái)配置數(shù)據(jù)讶请,可以使用Protobuf参袱、JSON、XML等序列化和反序列化特性對(duì)表格數(shù)據(jù)轉(zhuǎn)化秽梅。)
?
1.1.5抹蚀、資源管理(AssetBundle)
AssetBundle是Unity引擎提供的一種資源壓縮文件,文件擴(kuò)展名通常為unity3d或assetbundle企垦。
對(duì)于資源的管理环壤,其實(shí)是為熱更新提供可能,Unity制作游戲的資源管理方式就通過(guò)AssetBundle工具將資源打成多個(gè)ab包钞诡,通過(guò)網(wǎng)絡(luò)下載新的ab包來(lái)替換本地舊的包郑现,從而實(shí)現(xiàn)熱更的目的。
AssetBundle是Unity編輯器在編輯環(huán)境創(chuàng)建的一系列的文件荧降,這些文件可以被用在項(xiàng)目的運(yùn)行環(huán)境中接箫。(包括的資源文件有:模型文件(models)、材質(zhì)(materials)朵诫、紋理(textures)和場(chǎng)景(scenes)等辛友。)
Editor打包AssetBundle:
[MenuItem(“Assets/Build AssetBundles”)]
static void BuildAllAssetBundles(){
BuildPipeline.BuildAssetBundles(Application.dataPath + “/AssetBundles”, BuildAssetBundleOptions.None, BuildTarget.StandaloneOSXIntel);
}
1.1.6、熱更新框架(tolua剪返,xlua)
使用C#編寫底層框架废累,使用lua編寫業(yè)務(wù)邏輯,這是業(yè)內(nèi)最常見(jiàn)的設(shè)計(jì)方式脱盲,還有一個(gè)非常成熟的熱更新框架tolua,xlua邑滨。
通常可熱更新的有:圖片資源钱反、UI預(yù)制和lua腳本掖看,而處于跨平臺(tái)的考慮匣距,C#腳本是不允許進(jìn)行熱更的。