遊戲創業公司技術體系構建
一,公司技術團隊組建
當一款遊戲專案確認,準備好啟動資金之後,就是要考慮怎實現的問題了,技術團隊是遊戲產品實現的執行者,所以必須先組建一個強有力的技術團隊,是成功的第一步。毛主席說過,正確的路線確定之後,幹部就是決定因素。正所謂千軍易得,一將難求。一個團隊亦是如此,所以技術團隊的負責人的能力,經驗,很重要,豐富的經驗可以使團隊少走很多彎路。孫子說,為將者,智,信,仁,勇,嚴也,智為知識多,信為說到做到,仁為善於管道,統籌兼顧,勇為敢於承擔,嚴為仔細認真。所以做為一名技術主管,要能力強,會帶人,能服眾,保證團隊的穩定,高效,團結,才能更好的完成任務。
公司初期,技術團隊可能只需要三四個人,主要負責遊戲客戶端開發,伺服器開發,測試開發,遊管理方面的開發。這個階段的主要任務就是快速實現遊戲內容,讓策劃和產品負責人儘快能見到遊戲可操作的功能,方便他們後期調整與新的功能設計。隨著研發進度的推進,技術團隊會逐步擴充,所以要讓新人儘快的融入到團隊中是負責人的項重要工作,正所謂,兵不練不足以戰。
遊戲技術團隊一般有兩種,一,負責人對客戶端和伺服器開發都有相關經驗,這時,技術團隊可以採用一人負責制,由他全面統籌管理技術團隊,直接對外負責,這樣的好處是團隊的進度可以統一管理和調配,減少溝通成本;另外一種是客戶端有一個人負責,伺服器端有一個人負責,兩人同時對外負責,兩人共同協調技術團隊的管理,如果有爭議,需更高管理者解決,溝通成本增加,但技術管理更專業化,可以分工,提高程式碼質量所以技術團隊的組建,技術負責人很重要,他對成敗起著關鍵的作用,能力弱,瞎指揮,會讓團隊怨氣沖天;能力強而獨善其身,則發揮不了團隊優勢,前期人少還看不出來,後面團隊人數一多就難以統籌管理了。技術負責人不僅要技術強,還要懂得管理,強調合作。把自身的發展和團隊的發展,公司的發展融為一體。
二,遊戲開發技術的選擇
在遊戲專案確定之後,團隊組建初期,需要調研確認使用哪種技術來實現遊戲內容。就像戰術確定之後,需要什麼樣的武器去戰鬥一樣。如今網際網路的快速發展,新技術的不斷湧現,給了我們很多選擇。就開發語言來說,不下十幾種,最常見的有c++,c#,java,Lua,python,node.js,erlang等等,圍繞這些語又有很多開滿的框架,以提高開發效率。對於一個沒有技術積累的個公司,建議不要使用c++,它雖然是執行效率最高的語言,但是確實是開發效率最低的語言,而且熟練掌握這門語言也是一個挑戰。對於客戶端來說,目前unity是不二的選擇,它不僅是跨平臺開發的,而且是最方便的客戶端開發引擎。它一般用到的開發語言是c#和Lua。而伺服器可選擇的開發語言就多了,基本上上面說的開發語言都可以用來進行伺服器的開發。
對於技術的選擇,要考慮的因素有以下幾點:
1,開發效率
2,學習成本
3,開源元件豐富度
4,維護成本
5,執行效率
6,流行程度
開發效率快的開發語言,一般基礎功能不需要“重複開發”,語言本身現成的api就可以使用,發現異常比較快,一般高階語言就很適合,比如c#,java,可以縮短研發週期,使遊戲儘快上線,接受市場的檢驗。學習成本低的語言,人力資源比較豐富,在團隊擴充的時候,招聘相關技術人才的時候相對容易些。豐富的開源元件支援可以大大減少工作量,直接可以融入到自己的專案中,比如網路通訊框架,第三方日誌工具等。易維護的開發語言在部署服務時可以減少部署步驟,不同平臺支援良好,在執行期間如果出現錯誤,容易定位和解決。執行效率方面一般有個定率,執行效率越高,開發越成本就越高,學習成本也越高,所以除非追求極致的執行效率,應該選擇效率適中,開發速度快的語言,比如java,node.js,c#等。另外流行程度高的語言相對比較穩定,使用的人比較多,出現問題在網上也能迅速找到相關解決方案。
另外,技術團隊的技術選擇也和團隊負責人的經驗有關,比如,伺服器負責人一直使用的是node.js,那麼一般這個團隊就會選擇node.js,如果是java,就會選擇java。目前一般來說,對於創業公司來說,最好的選擇是unity+c#+lua+java。當然,具體的技術框架就因人而異了。
三,技術團隊的管理
程式碼規範
由於每個人的思路不同,受教育的方式不同,每個人的程式碼風格可能不一樣,但是作為一個開發團隊,團隊之間需要協作,如果每個人都有一套自己的程式設計風格,那程式碼閱讀起來就比較麻煩了,如果大家的風格都統一起來,變成團隊的風格,那程式碼看起來就像是一個人寫的,不同的人看起來也方便,維護也更容易,現在基本上每個團隊都會有一套自己的程式設計規範,如果沒有,可以參考一些大公司的規範,比如華為的程式碼規範,就非常詳細!
核心遊戲開發框架統一
在遊戲框架封裝時,有一部分是公共的,比如網路通訊層,快取層,資料層,這些都是公共模組,變化的只有功能邏輯,所以可以史針對邏輯制定一套開發流程。只要把底層的公共模組封裝好,邏輯功能就可以多人並行開發,以加快開發速度。
比如長連線遊戲的網路層,可以使用非同步通訊框架netty,它可以用作開發閘道器,負責與客戶端建立長連線,閘道器與邏輯伺服器的互動可以使用訊息佇列封裝為rpc呼叫。這樣邏輯層就不需要關心通訊層的實現,中需要關注邏輯開發就可以了。快取可以分為本地快取和不同程序快取,本地快取可以使用map,但需要注意執行緒安全和清除策略,這個以後我們再詳細分析。不同程序的快取也叫遠端快取,另起一個程序來快取資料,通過socket進行互動。目前流行的遠端快取框架是redis,它支援基本的資料結構快取,比如string,hash,list,set等。
資料庫一般來說使用mysql,對資料庫的操作會產生很多io的請求,如果太頻繁,會對資料造成很大的壓力,一般來說,遊戲中對資料庫的操作大多數都是更新操作,更新操作的結果可以快取在快取中。所以一般會採取定時把快取中的資料重新整理到資料庫中。
系統架構設計能力及原則
視野開闊,知道可以直接用哪個開源專案來滿足這樣那樣的需求。多數時候其實我們並不需要重複造輪子。視野窄的架構師會放著捷徑不走,不斷讓團隊重複造輪子,直至把專案拖死。
精通設計模式,但又不泛用。不設計過度,不在各種細節問題上需求蔓延。所有架構設計都是為了滿足產品需求的,不滿足需求或者過度設計都是菜鳥行為。
把系統拆分成多個子系統或模組,模組之間儘量鬆耦合,使得原先只能序列的開發任務,可以並行開展,也就是說良好的設計可以通過投入更多人力來縮短工期。反之拙劣的設計需要一個人維護一大坨程式碼,無法通過加人並行開發來縮短工期。
能清楚地知道系統的瓶頸在什麼地方,不斷地定位技術難度、研發進度、效能、記憶體等各方面的瓶頸,不斷調整骨幹力量解決瓶頸,在風險爆發之前就消除隱患。
行業經驗帶來的直覺和預見性,可以預先需求可能產生怎樣的變化,提前把可擴充套件性、後向相容性設計好。但仍然不要過度設計
程式碼管理,打包,測試及自動編譯部署
一個好的程式碼管理工具可以加快專案的開發速度,現在用的最多的就是git和svn,目前git優勢比較大,所以一般會選用git對程式碼進行管理,在開發中,可以方便的建立分支,合併分支,釋出版本等。在開發中,專案也需要一個好的管理外掛,目前最流行的java專案管理外掛是maven,基本上已取代ant。當專案開發到一定階段,需要編譯打包部署到測試環境中,使用maven可以很快的完成,而且maven + nexus + jenkins可以搭建一個自動編譯打包的環境。jenkins可以自動檢測git或svn的提交變化,如果檢測到變化,就會重新接取程式碼,並對程式碼進行編譯打包,部署。另外一個重要的是測試,沒有經過測試的程式碼總是有可能有bug,所以測試是專案釋出之前的最後一關,是非常重要的。良好的測試可以提前發現80%的bug。測試框架目前流行的是testng,它是junit的升級版。而且它可以和maven相結合,實現自動化測試。
團隊成員技術培訓
一個團隊,通過招聘或其它不同的方式大家組合在一起工作,每個人的技術程度有高有低,這樣不利於大家協同開發。所以需要對弱者進行培訓提高。技術培訓的意義有,一,提高團隊合作意識。能過簡單或定期的培訓,可以讓團隊中的老人和新人加快了解,通過向團隊中的老人學習,快速瞭解專案的各個模組,理解團隊的開發風格,更加深刻體會一個專案是由大家合作發開完成的。二,快速提高技術能力。通過培訓,閱讀團隊中高手的程式碼,增加對具體知識點的瞭解,開闊視野。快速提高本身的開發能力。三,增加團隊成員之間的瞭解,將來減少溝通的成本。四,增加團隊成員的自信心。當一個人的能力越來越強,他的自信心就越強,這樣做起事情來效率就越高。
團隊交流與合作
軟體開發,是一種腦力活動。腦力活動對工作的完成量及效率評估是很困難的。因為腦力工作需要的是人的主觀能動性。一個人的主觀能動性越強,他做起事情來積極性就越高。在團隊中,影響成員個人主動性的因素有很多,比如自信心,如果一個人有確少自信,那麼他做起事情來,就會畏手畏腳,容易想的多,把簡單的事情變化複雜化;二,團隊之間交流的態度。如果團隊中高手對於別的成員總是趾高氣揚,自己牛就看不起其他成員,這樣就會突顯個人英雄主義,孤芳自賞,沒有人願意與他合作,遇到牽涉到他的模組時不願意與它交流,總會想辦法繞過,而不及時溝通。所以團隊之間交流的態度,語氣,方式很重要,要懂得尊重他人,理解他人,相互幫助。而不是指責。比如發現某一個bug,就開始嚷嚷說是某某的bug,幸災樂禍。這對士氣本身就是一個打擊。而應該以幫忙的方式指出bug,並幫助修改。團隊中有一個融洽的氣氛,大家朝一個方向努力,士氣高漲,工作起來效率就自然而然的高了。
遊戲伺服器的基本系統
1,遊戲邏輯功能
2,日誌分析系統
3,後臺管理系統
4,訪問控制系統
5,效能監控系統
6,自動部署系統
7,自動負載系統
只有當這些系統都開發完成之後,一個遊戲專案才算開發完成,可以上線測試。所以創業公司一定要對遊戲專案的整體有一個完全的理解,詳細的規劃,這樣可以增加成功的機率。
遊戲技術網公眾號,掃描加入討論遊戲伺服器開發技術