unity游戲框架淺談(一)

資源來(lái)源于網(wǎng)絡(luò)”VRunSoftYanlz”

1.Unity3D游戲客戶端基礎(chǔ)框架

image
image.gif

?

1.1笤受、Unity3D游戲客戶端游戲框架

  1. 一些通用的基礎(chǔ)系統(tǒng)的框架搭建下面,其中包括:

  2. UI框架(UGUI+MVC)

  3. 消息管理(Message Manager)

  4. 網(wǎng)絡(luò)層框架(Socket + Protobuf)

  5. 表格數(shù)據(jù)(Protobuf)

  6. 資源管理(Unity5.x的AssetBundle方案)

  7. 熱更框架(tolua唠亚,xlua)

image
image.gif

?

1.1.1、UI框架

  1. 編寫UI框架的意義:

  2. 打開、關(guān)閉、層級(jí)镀虐、頁(yè)面跳轉(zhuǎn)等管理問(wèn)題集中化,將外部切換等邏輯交給UIManager處理沟绪。

  3. 功能邏輯分散化刮便,每個(gè)頁(yè)面維護(hù)自身邏輯,依托于框架便于多人協(xié)同開發(fā)绽慈,不用關(guān)心跳轉(zhuǎn)和顯示關(guān)閉細(xì)節(jié)恨旱。

  4. 通用性框架能夠做到簡(jiǎn)單的代碼復(fù)用和“項(xiàng)目經(jīng)驗(yàn)”沉淀。

  5. 基于Unity3D和UGUI實(shí)現(xiàn)的簡(jiǎn)單的UI框架坝疼,實(shí)現(xiàn)內(nèi)容:

  6. 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ò)展筑公;

image
image.gif

?

1.1.2雳窟、消息管理(Message Manager)

  1. 一個(gè)消息系統(tǒng)的核心功能:

  2. 一個(gè)通用的事件監(jiān)聽器;

  3. 管理各個(gè)業(yè)務(wù)監(jiān)聽的事件類型(注冊(cè)和解綁事件監(jiān)聽器)匣屡;

  4. 全局廣播事件封救;

廣播事件所傳參數(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)化秽梅。)

image
image.gif

?

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)行熱更的。

未完待續(xù)

感謝關(guān)注個(gè)人博客

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末哎壳,一起剝皮案震驚了整個(gè)濱河市墨礁,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌耳峦,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,546評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件焕毫,死亡現(xiàn)場(chǎng)離奇詭異蹲坷,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)邑飒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門循签,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人疙咸,你說(shuō)我怎么就攤上這事县匠。” “怎么了撒轮?”我有些...
    開封第一講書人閱讀 164,911評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵乞旦,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我题山,道長(zhǎng)兰粉,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,737評(píng)論 1 294
  • 正文 為了忘掉前任顶瞳,我火速辦了婚禮玖姑,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘慨菱。我一直安慰自己焰络,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,753評(píng)論 6 392
  • 文/花漫 我一把揭開白布符喝。 她就那樣靜靜地躺著闪彼,像睡著了一般。 火紅的嫁衣襯著肌膚如雪协饲。 梳的紋絲不亂的頭發(fā)上备蚓,一...
    開封第一講書人閱讀 51,598評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音囱稽,去河邊找鬼郊尝。 笑死,一個(gè)胖子當(dāng)著我的面吹牛战惊,可吹牛的內(nèi)容都是我干的流昏。 我是一名探鬼主播,決...
    沈念sama閱讀 40,338評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼况凉!你這毒婦竟也來(lái)了谚鄙?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,249評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤刁绒,失蹤者是張志新(化名)和其女友劉穎闷营,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體知市,經(jīng)...
    沈念sama閱讀 45,696評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡傻盟,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,888評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了嫂丙。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片娘赴。...
    茶點(diǎn)故事閱讀 40,013評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖跟啤,靈堂內(nèi)的尸體忽然破棺而出诽表,到底是詐尸還是另有隱情,我是刑警寧澤隅肥,帶...
    沈念sama閱讀 35,731評(píng)論 5 346
  • 正文 年R本政府宣布竿奏,位于F島的核電站,受9級(jí)特大地震影響腥放,放射性物質(zhì)發(fā)生泄漏议双。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,348評(píng)論 3 330
  • 文/蒙蒙 一捉片、第九天 我趴在偏房一處隱蔽的房頂上張望平痰。 院中可真熱鬧,春花似錦伍纫、人聲如沸宗雇。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)赔蒲。三九已至,卻和暖如春良漱,著一層夾襖步出監(jiān)牢的瞬間舞虱,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工母市, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留矾兜,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,203評(píng)論 3 370
  • 正文 我出身青樓患久,卻偏偏與公主長(zhǎng)得像椅寺,于是被迫代替她去往敵國(guó)和親浑槽。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,960評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容