《江湖X》開(kāi)發(fā)筆談 - 技術(shù)選型

寫(xiě)在開(kāi)頭牺弄,對(duì)于任何非尖端型研發(fā)項(xiàng)目的技術(shù)選型,我的忠告:

不要造次

江湖X技術(shù)選型


客戶(hù)端: Unity(C#+lua)
服務(wù)器: SCut(C#)
數(shù)據(jù)庫(kù): redis宜狐、mysql

關(guān)于客戶(hù)端游戲引擎


Unity目前是势告,未來(lái)幾年內(nèi)也將會(huì)是中小型游戲工作室的最佳游戲引擎選擇蛇捌。

從開(kāi)始使用unity前,我對(duì)上面這句話咱台,深信不疑络拌。
到我們使用unity后,我對(duì)上面這句話回溺,更加深信不疑春贸。

技術(shù)選型的過(guò)程

使用unity其實(shí)我們沒(méi)有太多的疑問(wèn)。

Unity的強(qiáng)大之處遗遵,我就不贅述了萍恕,有興趣的同學(xué)自行翻閱官方資料和業(yè)界評(píng)價(jià)。此處只說(shuō)一下我當(dāng)時(shí)的思路歷程

在開(kāi)始做《金庸群俠傳X》以前车要,我就開(kāi)始關(guān)注了一系列當(dāng)時(shí)的游戲引擎或圖形開(kāi)發(fā)庫(kù)(可以見(jiàn)我更早期的博客)允粤,包括SDL、HGE屯蹦、FLASH等等维哈。

后來(lái)嘗試過(guò)使用silverlight/WPF框架(金X在0.6之前的版本,就都是使用silverlight開(kāi)發(fā)的)

決定使用unity是當(dāng)時(shí)需要將《金X》移植到手機(jī)平臺(tái)登澜,考慮到代碼的通用性阔挠,我們便采用了同樣使用C#編程語(yǔ)言開(kāi)發(fā)的Unity。移植比較順利脑蠕,當(dāng)時(shí)大概只花了2天左右的時(shí)間购撼,就初步完成了。

我當(dāng)時(shí)同樣嘗試了FLASH的方案 AIR/Starling框架谴仙,我花了大概4天時(shí)間將游戲初步移植迂求,但發(fā)現(xiàn)其整體開(kāi)發(fā)效率、直觀性等一系列均落后與unity晃跺,考慮更多的是揩局,unity社區(qū)非常繁榮,而flash正日薄西山掀虎,所以我放棄了FLASH體系凌盯。

眾所周知,近幾年主流的跨平臺(tái)手機(jī)游戲引擎是cocos2d和Unity烹玉,cocos2d主要使用C++開(kāi)發(fā)(最近貌似在大規(guī)模推cocos2d-js以及配套的大量集成開(kāi)發(fā)環(huán)境)驰怎,而Unity使用C#——在開(kāi)發(fā)效率上,我認(rèn)為unity幾乎完勝二打。

而我認(rèn)為县忌,在小型獨(dú)立游戲工作室,開(kāi)發(fā)效率大于一切。

關(guān)于編程語(yǔ)言

我個(gè)人非常喜歡 C#語(yǔ)言症杏,我曾經(jīng)使用過(guò)非常多的編程語(yǔ)言(如C装获、C++、PASCAL鸳慈、python饱溢、perl喧伞、C#走芋、java、javascript潘鲫、php翁逞、AS、ruby溉仑、lua挖函、LOGO……),C#和python毫無(wú)疑問(wèn)是我用的最爽的編程語(yǔ)言浊竟。

寫(xiě)在前面怨喘,當(dāng)然C#毋庸置疑寫(xiě)代碼的時(shí)候很爽,但實(shí)際跑在生產(chǎn)環(huán)境中的時(shí)候振定,坑還是不少必怜。特別是很多寫(xiě)法在不知道實(shí)現(xiàn)原理的情況下,沒(méi)有經(jīng)驗(yàn)的程序員很容易寫(xiě)出性能非常低下或者開(kāi)銷(xiāo)非常大的代碼后频、或者是Unity的.NET subset不支持梳庆、抑或是iOS的一些特性導(dǎo)致不支持的代碼,這里我會(huì)在后續(xù)的博客中總結(jié)說(shuō)明卑惜。

這種隱性約束的坑膏执,不趟一遍永遠(yuǎn)是不會(huì)注意的。

另外露久,使用lua語(yǔ)言進(jìn)行熱更新已經(jīng)幾乎是行業(yè)標(biāo)配:lua是非常非常適合游戲開(kāi)發(fā)的腳本語(yǔ)言更米。

關(guān)于熱更新這里簡(jiǎn)要說(shuō)明一下:

熱更新:在游戲中不升級(jí)客戶(hù)端安裝程序的情況下,對(duì)游戲進(jìn)行更新毫痕。也稱(chēng)游戲內(nèi)更新征峦。

ulua提供了高性能的靜態(tài)/動(dòng)態(tài)綁定,來(lái)實(shí)現(xiàn)和C#的交互镇草。(雖然也有很多坑?籼怠)
我們將在后面單獨(dú)一節(jié),講解熱更新機(jī)制的設(shè)計(jì)及實(shí)現(xiàn)梯啤。

關(guān)于UI系統(tǒng)

在Unity下竖伯,UI系統(tǒng)有若干解決方案。目前主流使用的是NGUI,大量基于unity的商業(yè)游戲也證明了NGUI的可用性七婴。

我自己當(dāng)時(shí)通過(guò)反復(fù)對(duì)比祟偷,認(rèn)為UGUI一定是未來(lái)的發(fā)展趨勢(shì)(畢竟官方支持),所以即使有非常多的坑打厘,我也愿意和unity的成長(zhǎng)一起來(lái)趟修肠。

主要是我認(rèn)為NGUI的很多實(shí)現(xiàn)方式感覺(jué)像在一個(gè)3D引擎上打補(bǔ)丁,而非優(yōu)雅的解決方案户盯。讓我用起來(lái)非常別扭嵌施,而UGUI更加強(qiáng)大的所見(jiàn)即所得的編輯模式吸引了我。

在此插句話莽鸭,我還是非常中肯的認(rèn)為吗伤,微軟的Expression Blend是我曾經(jīng)用過(guò)的最好的UI builder工具!

所以我們第一時(shí)間入了當(dāng)時(shí)并不成熟的UGUI的坑(Unity4.6)硫眨,并且為之付出了非常沉重的代價(jià)(如中間很長(zhǎng)一段時(shí)間的UI bug導(dǎo)致閃退)

目前來(lái)看足淆,我還是認(rèn)為值得。并且為堅(jiān)持當(dāng)時(shí)自己的選擇感到欣慰礁阁。
Unity團(tuán)隊(duì)一直在很努力的改進(jìn)UGUI巧号,其以肉眼可見(jiàn)速度在完善。綜合我們的開(kāi)發(fā)效率來(lái)看姥闭,其易用性丹鸿、性能均可,穩(wěn)定性還有可提升空間泣栈,但目前及時(shí)開(kāi)發(fā)商業(yè)級(jí)游戲卜高,也屬于完全可用狀態(tài)。

關(guān)于服務(wù)器游戲引擎


不同于大部分游戲開(kāi)發(fā)團(tuán)隊(duì)南片,我希望服務(wù)器和客戶(hù)端使用完全一樣的開(kāi)發(fā)語(yǔ)言掺涛。

好處:

  • 程序員只需要學(xué)習(xí)/精通一門(mén)語(yǔ)言,利于后期擴(kuò)展團(tuán)隊(duì)
  • 我并不希望嚴(yán)格的區(qū)分客戶(hù)端和服務(wù)器程序疼进,因?yàn)槲艺J(rèn)為兩者本身就是一體的薪缆。一個(gè)合格的程序員應(yīng)該從前端到后端可以獨(dú)立完成一個(gè)模塊。
  • 客戶(hù)端和服務(wù)器可以共享同樣的數(shù)據(jù)結(jié)構(gòu)伞广,并且是一份代碼(甚至一個(gè)dll)
  • 可以隨時(shí)將代碼從客戶(hù)端挪到服務(wù)器拣帽、或者從服務(wù)器挪到客戶(hù)端,進(jìn)行非常靈活的計(jì)算部署或數(shù)據(jù)驗(yàn)證(甚至可以像開(kāi)發(fā)單機(jī)一樣來(lái)開(kāi)發(fā)網(wǎng)游)

通過(guò)調(diào)研后嚼锄,我們挑選了國(guó)人寫(xiě)的游戲服務(wù)器引擎Scut作為開(kāi)發(fā)框架减拭。

當(dāng)然,從一開(kāi)始区丑,我們就規(guī)劃了服務(wù)器群組的概念拧粪,這個(gè)我會(huì)在后續(xù)的文章中講解修陡。
服務(wù)器結(jié)構(gòu),我們也劃分了諸如賬號(hào)服務(wù)器可霎、游戲服務(wù)器魄鸦、計(jì)算節(jié)點(diǎn)服務(wù)器等⊙⒗剩基于更長(zhǎng)遠(yuǎn)的業(yè)務(wù)邏輯規(guī)劃拾因,賬號(hào)服務(wù)器我們目前使用J2EE的框架開(kāi)發(fā)的,提供RESTful接口給游戲服務(wù)器調(diào)用旷余,此處不贅述绢记。

關(guān)于數(shù)據(jù)庫(kù)


KV型數(shù)據(jù)庫(kù)和關(guān)系型數(shù)據(jù)庫(kù)各有合適的應(yīng)用場(chǎng)景,所以我們兩者同時(shí)使用荣暮。

Redis

一些高頻訪問(wèn)庭惜、游戲業(yè)務(wù)邏輯嚴(yán)密相關(guān)的數(shù)據(jù)罩驻,我們均放在redis里穗酥。并且我們?cè)O(shè)計(jì)了一套原創(chuàng)的ORM框架,來(lái)實(shí)現(xiàn)C#的POJO到KV型DB的映射惠遏。

此框架極大的利于我們提升開(kāi)發(fā)效率砾跃,我們永遠(yuǎn)只需要關(guān)注邏輯實(shí)現(xiàn),而不用關(guān)心底層存儲(chǔ)节吮。為了節(jié)省傳輸帶寬和計(jì)算資源抽高,我們實(shí)現(xiàn)的ORM框架保證了所有的數(shù)據(jù)增量同步。

有時(shí)間的話透绩,我將會(huì)在后續(xù)的文章中詳細(xì)的介紹本框架翘骂。或者有必要的話帚豪,我們會(huì)考慮開(kāi)源碳竟。

同時(shí),我們還在依托于redis的查詢(xún)性能做了大量活躍數(shù)據(jù)的存儲(chǔ)(相當(dāng)于充當(dāng)了memcache的角色)狸臣,這樣比自己開(kāi)發(fā)代碼級(jí)緩存或在mysql里緩存性能要高許多莹桅。

MySQL

沒(méi)有太多好說(shuō)的,一些賬號(hào)關(guān)鍵數(shù)據(jù)烛亦,我們使用mysql記錄诈泼。

后續(xù)優(yōu)化方案

為了提高服務(wù)器性能及單位硬件內(nèi)支撐人數(shù),合理的處理并發(fā)擁塞煤禽,我們后續(xù)會(huì)引入MQ(消息隊(duì)列)铐达、基于對(duì)象數(shù)據(jù)庫(kù)或OSS的多級(jí)緩存機(jī)制,我會(huì)在后續(xù)的文章中詳細(xì)說(shuō)明檬果。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末瓮孙,一起剝皮案震驚了整個(gè)濱河市贾节,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌衷畦,老刑警劉巖栗涂,帶你破解...
    沈念sama閱讀 217,406評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異祈争,居然都是意外死亡斤程,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門(mén)菩混,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)忿墅,“玉大人,你說(shuō)我怎么就攤上這事沮峡【纹辏” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,711評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵邢疙,是天一觀的道長(zhǎng)棍弄。 經(jīng)常有香客問(wèn)我,道長(zhǎng)疟游,這世上最難降的妖魔是什么呼畸? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,380評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮颁虐,結(jié)果婚禮上蛮原,老公的妹妹穿的比我還像新娘。我一直安慰自己另绩,他們只是感情好儒陨,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著笋籽,像睡著了一般蹦漠。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上干签,一...
    開(kāi)封第一講書(shū)人閱讀 51,301評(píng)論 1 301
  • 那天津辩,我揣著相機(jī)與錄音,去河邊找鬼容劳。 笑死喘沿,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的竭贩。 我是一名探鬼主播蚜印,決...
    沈念sama閱讀 40,145評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼留量!你這毒婦竟也來(lái)了窄赋?” 一聲冷哼從身側(cè)響起哟冬,我...
    開(kāi)封第一講書(shū)人閱讀 39,008評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎忆绰,沒(méi)想到半個(gè)月后浩峡,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,443評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡错敢,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評(píng)論 3 334
  • 正文 我和宋清朗相戀三年翰灾,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片稚茅。...
    茶點(diǎn)故事閱讀 39,795評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡纸淮,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出亚享,到底是詐尸還是另有隱情咽块,我是刑警寧澤,帶...
    沈念sama閱讀 35,501評(píng)論 5 345
  • 正文 年R本政府宣布欺税,位于F島的核電站侈沪,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏魄衅。R本人自食惡果不足惜峭竣,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望晃虫。 院中可真熱鬧,春花似錦扣墩、人聲如沸哲银。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,731評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)荆责。三九已至,卻和暖如春亚脆,著一層夾襖步出監(jiān)牢的瞬間做院,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,865評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工濒持, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留键耕,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,899評(píng)論 2 370
  • 正文 我出身青樓柑营,卻偏偏與公主長(zhǎng)得像屈雄,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子官套,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評(píng)論 2 354

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