進入遊戲行業1年的總結

2022-03-22 00:09:06 字數 4580 閱讀 9197

從我知道有程式設計這回事以來,就把程式設計作為理想職業了,可惜我直到大二才知道有這回事。而且由於悟性不高見識不夠,在成為一名真正意義上的程式設計師的路上走了不少彎路。直到我進入遊戲行業之後,才找到了作為乙個程式設計師的感覺。其實真正的程式設計師都是希望開發系統軟體的,作業系統、編譯器、資料庫之類,不過遊戲作為一種軟體算是離系統開發最近的一種商業軟體了,而遊戲引擎也算是一種系統軟體。入行晚就要多接觸多理解才能趕得上大家的節奏啊,我一年內換了三個工作,來到現在這家公司的原因是想參與乙個從頭開發的專案。不得不說工作和生活還是息息相關的,工資低、離家遠、專案對自己沒幫助,都有可能讓人無法忍受。

下面進入正題,我做的是手遊伺服器開發,目前手遊伺服器的特點是:短連線、高併發、輕邏輯。和**伺服器的要求非常一致,以至於大家都用**伺服器稍微改裝一下就搞起了。我們的server底層用的是端遊改裝的,簡單的ping-pong測試也能達到1w的併發(系統功能開發前的測試),不過一旦加上系統功能邏輯,連2k的併發都達不到。所以這樣的底層只能作為開發版本,過完年必須換血。現在有很多基於nginx的網路伺服器框架,應該是非常適合手遊專案的。這個我也決定不了,暫且不提。

我是做邏輯開發的,慢慢來吧。幸好手遊專案小,邏輯簡單周期短,我大概做了15個系統功能,而且具體實現比較符合我對程式的理解。為了紀念這個愉快的過程,我把整個專案開發的過程概括一下吧。

專案開工之前的準備工作:

1.招人。整個專案週期內普通的團隊都要經歷人員流動的問題,專案負責人的性格和領導能力決定了團隊的氛圍。所以公司老大要先搞定專案製作人和程式主管這倆職位,然後是主策劃,前後端主程,我們團隊的配置就是以這5人為核心的。所以公司給他們分配的資源也最多,畢竟這個專案缺了其他人就如同少了個工具,缺了這幾個人就像缺了胳膊腿一樣。所以沒辦法大家還是努力成為骨幹吧,7分技術3分運氣,畢竟遊戲行業還算是科技領域,技術水平業務水平還是硬道理。

2.遊戲定位。乙個專案總得有個吸引人的地方才有吸金能力,我們這個專案有個天然優勢就是ip很火。但是光有乙個好ip沒用,這個ip以前也做過頁遊和手遊,都石沉大海了,不知道是運營問題還是作品差。最終專案製作人確定的玩法是「第一人稱射擊類手遊」,融合卡牌遊戲和rpg的元素,說白了就是主角帶著小夥伴打殭屍的遊戲。

3.策劃總綱。這個就是考驗製作人的經驗和創新能力了,手遊不能做得太大,也不能太普通,要結合ip的特點進行取捨和創新。策劃總綱裡面指定了遊戲要完成的基本功能和基本效果,還有收費原則(坑要多要深,兼顧平衡)、吸引留存的方式(簡化註冊登入,所有功能設計沒有理解成本但要有創新)、付費方式(簡化付費流程,多種vip等級)等。

4.專案工期。這個是程式主管的工作,根據工作量確定需要多少人,工期進度計畫,對有經驗的程式來說問題不大。這個階段要把前後端選用的技術方案大致定下來,比如前端unity3d,後端c++ lua這種典型方案。然後是人員配置前端6~8人,後端3~4人,對於手遊專案已經比較豪華了(看水平。。)

基本人員到齊,專案工期已定,進入專案的前期demo階段:

1.招人。還是得擴充軍備,人齊了才能盡快進入穩定期。

2.運營宣傳。這年頭都是兵馬未動,聲勢先傳出去,給人宣傳個一年半載的才看到廬山真面目。搶眼球的時代。

3.策劃分解。根據總綱分解出系統策劃、數值策劃、關卡策劃的工作範圍,然後出乙個策劃案demo版本。

4.程式框架。前後端都要制定技術框架,前端unity3d比較薄弱,需要先解決技術問題才能出方案。後端比較成熟,只不過需要敲定用哪些技術,結合運營部署的要求給出部署伺服器方案、開服合服方案、統一管理介面。這裡必須吐槽的有兩點:一是前後端開發分離,這會導致前後端開發不同步問題、前後端對接問題、不同人的對接方式不一致問題,可謂是萬惡之源,極大的拖慢開發進度。但也沒辦法,前端的程式不會c++,後端的lua介面又沒接上;後端的程式不懂unity,本身前端就有沒解決的技術問題;導致開始的時候沒法按功能把前後端工作都分給乙個人,只能兩邊配合,說白了還是碼農水平的問題。二是server跨平台,在我看來,除了通訊協議和語言標準是平台無關的,其他的東西都是平台相關的,posix不過是一廂情願。跨平台不是一件簡單的事情,但是人們都有這樣的願望,所以除非我們已經有了跨平台的支撐框架(比如qt對於gui)否則千萬別自討苦吃。windows和linux版本的程式寫的越好就越沒有相似性,其實他媽本來就是兩套**。至於為啥我們選擇跨平台捏,說出來讓人很無語,linux適合做server(免費+穩定),但是程式設計師不會在linux下開發,尼瑪還是碼農水平的問題。我能說在linux下開發其實比在vs下更有效率嗎,vs除了complate和reflact是優勢,其他方面和linux比(工具鏈方面)甚至稍遜一點。關鍵的問題在於程式執行機制的問題,linux下是統一的思路:server程式做成deamon程序(windows下一般不做成服務程序,可能是不好管理),輸出日誌可以用tail實時檢視(windows下要列印到螢幕上乙份),shell啟動和停止指令碼完美配合(windows下可以用指令碼啟動停止,但是沒法傳遞訊息給程式,只能在cmd上ctrl+c讓程式捕獲),程式宕機自動dump(windows下需要借助seh的特殊處理方式產生dump檔案),等等問題吧。

5.流程和規範。

工作流程有:

每週總結會、每週週報、每天站立會

svn許可權分配

從策劃草案-定案-程式執行-策劃驗收-測試版本-測試驗收的整個流程

每個人的任務分配方式,任務時間評估

測試bug管理流程

制定規範:

策劃文件、程式文件、美術文件、測試文件等的命名規範和格式模版

前端**規範

後端**規範,這個是我出的,基本和google的c++規範差不多,做了點擴充套件,然後定了一套我覺得好的命名方案。我覺得比較成功的一點就是規定了**注釋必須用中文,說實話能用中文寫明白注釋的人都不多。

7.伺服器壓力測試。首先要有乙個可用的伺服器底層,這個底層上面也說了,是從乙個端遊抽出來的,僅保留網路連線和資料庫連線兩個功能。然後要做乙個壓力測試機械人,這個是我做的,第一版的機械人是單機模擬一組機械人併發。因為要有介面反饋,我選用c#的wpf做的ui,確實很強大。第二版的機械人就牛逼了,我做了乙個控制中心連線所有的機械人客戶端,然後統一下發配置和啟動測試。目前已經是第三版,可以用真實的客戶端伺服器互動資訊,在server端錄製互動報文(這應該在client端錄製,可惜前後端是分離的,我改不了前端的**),然後作為機械人的測試指令碼做壓測。有了機械人,我把伺服器的登入部分第一版完成(基礎邏輯就是玩家登入的時候傳送乙個裝置id到gateserver,如果已經快取此裝置id就返回對應的guid給客戶端,表示已經登入。否則去db查詢裝置id對應的guid,如果找不到就建立乙個guid繫結裝置id,存入db;找到則通知gameserver從db查詢玩家資料初始化,初始化完成後通知gate,再通知client)。

8.前後端對接。前後端都會完成幾個基本系統功能,比如主角系統、**系統、副本系統,通過這幾個系統,實現系統功能和關卡玩法對接,前端表現和後端邏輯對接。對接成功之後算是基本的技術開發流程走通。然後是打包發布apk和ios版本測試,於是乎demo完成。

ok,經過第乙個demo版本,團隊配合也差不多磨合出來了,進入鋪量開發期:

上個階段因為處於磨合期,很多流程規範是逐步建立的,會留下很多問題。這個階段會把所有的系統從新設計一遍,按照流程逐個開發,直到完成乙個各方面符合預期的版本。這個時候前後端開發是並行的,前端系統開發和關卡開發是並行的。這個週期比較關鍵,前後端都要出來乙個邏輯上的框架統一管理所有模組。前端需要管理場景、預設、美術資源、聲音、邏輯模組劃分、怪物ai狀態機等等。後端需要管理client-gate-game通訊模型、日誌輸出、資料庫操作封裝、玩家管理(登入、踢出、封號、解封)、配置檔案管理、邏輯模組劃分、公共資料管理、時間管理(定時器和計時器)等等吧。解決完這些問題之後,整個開發過程就順暢了許多。不過這個時候前後端配合開發的問題就暴露出來了,不同的人對前後端的分工見解不一致,最終導致了最後開發高階功能的時候各種介面不一致。以此為鑑吧大家,要想前後端配和開發,必須有很強的預見性,對通訊協議和邏輯劃分都全面考量。對推脫責任消極怠工的員工陷害踢出(招人的時候幹嘛了)。

說說這個階段的完成的功能模組,登入-**-副本-夥伴-主角-任務-揹包-簽到-競技場-排行榜-圖鑑-成就-vip-隊伍-商店-裝備-解密-傭兵團-gm-招募-修煉-資訊提示-新手引導。。大概這些,可能有忘了的,不過沒關係,做系統功能的特點是,做10個和做20個差不多。有時候好幾個功能一塊做,都分不清誰是誰了。我覺得只要把系統功能背後的支撐框架做出來,或者找到乙個適合表達的模型出來,剩下的就是往上面一套。說白了就是機制和策略分離的原則,系統功能會不斷新增,所以必須把新功能向目前的功能系統框架下正交分解,如果沒法分解,就增強系統框架。

鋪量開發的後期是出問題的階段,因為開發模式的問題,前後端很多邏輯層次的劃分不同導致了開發綜合功能的時候不能統一處理。前端尤其嚴重,比如前端的資料同步,a系統使用了b系統的資料,而b系統可能沒有從伺服器同步資料,這時候a怎麼辦?向server請求b的資料顯然不對;在a系統載入之前載入b系統會導致登入的時候要載入大部分的系統;登入的時候分步請求所有系統的資料會導致登入延遲或者server承載過大。目前的解決方案就是第二種,不過我覺得還是第三種好點,只需要前端把登入分兩步,一步是loading核心資料,第二步是彈出公告資訊和玩家登入後的收益什麼的,先進介面再說。整個過程實際上還是在後台載入資料(好像是windowsxp的作風)。再吐槽乙個例子,a系統呼叫了b系統的功能,b系統介面關閉之後,a系統不知道b系統幹了什麼。這是因為每個系統單獨開發的時候,都是依賴後台通知的,前端系統互相之間沒有建立資料介面,導致這種簡單的增加乙個資料介面或者**介面就完成通知的事情,變成了問題。這就是前後端開發沒有邏輯上劃分清楚,導致前端只管表現,後端只管奶媽的情況。

暫時寫到這裡吧。專案還沒開發完,和平台對接的大戰還沒開啟,估計又是各種扯皮的問題了。

2023年遊戲行業概況

2014年快要結束了,xsolla 想和大家一起回顧一下這一年遊戲圈裡發生的重大事件和變化.去年,索尼和微軟都發布了下一代平台 ps4和xbox one,同時,這也是眾多玩家期待單機遊戲爆發力量的一年。然而,許多令人期待的作品比如sunset overdrive 和 bloodbourne 都被推遲...

進入遊戲行業的一些個人感想

小時候比較喜歡玩遊戲,很好奇遊戲怎麼開發出來的,總想去嘗試開發遊戲。畢業出來的時候做的是嵌入式開發,做了一年以後,就離職了。懷揣夢想 算是吧,哈 就嘗試去面試了遊戲公司,面試的時候感覺還挺不錯,就是工作時間有點長。不過既然要進入這個行業,就已經了解過,網際網路公司基本都是996的了。已經半年過去了,...

遊戲行業和其他行業開發的對比

遊戲行業和其他行業的資深程式設計師對比 首先這個 資深程式設計師 就是單純指技術綜合實力強的程式設計師,和年齡,從業時間,頭銜都無關.3a大作中尤其是強技術型別的,其規模複雜度和技術深度的挑戰都非常高,另外大量的作品在多年間保持一代代的出,中間在不停的進化,對開發效率要求也不低.橫向對比,不輸於大型...