在網(wǎng)易游戲的第二年——Jerish的2020總結(jié)
各位讀者朋友好,我是Jerish!不知不覺又是一年春節(jié)來(lái)臨,在這里先預(yù)祝各位新年快樂,一切順利!
2020年是風(fēng)云變幻的一年,疫情對(duì)我所在的游戲行業(yè)造成了不小的沖擊和影響。但這一年也發(fā)生了許多振奮人心的大事,次時(shí)代引擎虛幻5的公布、XBOX和PS的新主機(jī)相繼亮相、國(guó)產(chǎn)游戲黑神話悟空轟動(dòng)游戲圈...作為一個(gè)普通的游戲開發(fā)者,我既是歷史的見證者,同時(shí)也在以微小的力量推動(dòng)著歷史前行。

按照慣例,這篇文章是我對(duì)這一年學(xué)習(xí)工作的復(fù)盤和反思,希望這個(gè)習(xí)慣能夠持續(xù)地引導(dǎo)我在2021年繼續(xù)成長(zhǎng),也希望這些成果和經(jīng)驗(yàn)?zāi)芙o大家?guī)?lái)些許的啟發(fā)和幫助。
一、這一年我做了什么
作為一名還在成長(zhǎng)中的游戲開發(fā)者,我這一年的核心主要還是在項(xiàng)目經(jīng)驗(yàn)的積累和專業(yè)技能的學(xué)習(xí)上。
1.輸出《細(xì)談網(wǎng)絡(luò)同步在游戲歷史中的發(fā)展變化》系列文章
2020年初的時(shí)候,我受邀撰寫網(wǎng)絡(luò)同步相關(guān)的技術(shù)文章。起初只打算寫一篇總結(jié)性的文章來(lái)發(fā)布,然而隨著不斷的學(xué)習(xí)和深耕,我發(fā)現(xiàn)對(duì)很多問題的理解有不足或出入,于是便一遍遍地看論文和視頻反復(fù)學(xué)習(xí),最終花了接近半年的業(yè)余時(shí)間完成了整個(gè)系列??梢哉f(shuō),這是我目前所有輸出里質(zhì)量最高的一個(gè)系列,既客觀完整地梳理了網(wǎng)絡(luò)同步的發(fā)展歷史,也總結(jié)涵蓋了幾乎所有同步相關(guān)的技術(shù),算是為游戲行業(yè)的專業(yè)領(lǐng)域添補(bǔ)了一點(diǎn)點(diǎn)空白。為了方便大家閱讀,我做了適當(dāng)?shù)难a(bǔ)充和調(diào)整并將其整理成了PDF(竟然70多頁(yè),可以考慮豐富一下細(xì)節(jié)出書了),年后會(huì)免費(fèi)給大家放出。

2.個(gè)人成長(zhǎng)與工作瓶頸的突破
我在知乎上將自己定位為一名Gameplay程序,主攻同步、回放、角色、技能、3C(關(guān)于3C后面我會(huì)出一篇科普文)這些與游戲玩法高度相關(guān)的內(nèi)容。技術(shù)上涉及網(wǎng)絡(luò)同步、動(dòng)畫、物理、材質(zhì)、資源加載、性能優(yōu)化、UI、多線程、GC、Lua、C++、Socket、Http,Linux,Nginx,Php等。
Gameplay這一塊深入來(lái)看還是比較復(fù)雜的,或者說(shuō)比大部分游戲開發(fā)者想象中要難,比如FPS與MOBA的網(wǎng)絡(luò)同步、Minecraft的地形生成與銷毀、ACT的戰(zhàn)斗系統(tǒng)。拿Unreal引擎來(lái)說(shuō),它的GAS(GameplayAbility)可以在商業(yè)化項(xiàng)目中解決技能、Buff等因?yàn)榫W(wǎng)絡(luò)不同步導(dǎo)致的表現(xiàn)異常的問題,而與GAS同等質(zhì)量的技能系統(tǒng)鮮有項(xiàng)目可以自己搞出來(lái)。
工作之余,今年也看了不少專業(yè)書籍與資料來(lái)扎實(shí)基礎(chǔ)。書籍方面,有《網(wǎng)絡(luò)多人游戲架構(gòu)與編程》、《游戲編程精粹》(部分章節(jié))、《Lua程序設(shè)計(jì)》、《大型多人游戲在線開發(fā)》、《深入理解計(jì)算機(jī)原理》(重新完整地看了一遍,依然有新的理解和收獲);語(yǔ)言方面,零零碎碎地看了一些C++模板(研究了一些虛幻內(nèi)置的數(shù)據(jù)結(jié)構(gòu))、多線程編程、反匯編、C++11、Lua等語(yǔ)言基礎(chǔ)相關(guān)的文章;游戲開發(fā)方面,通過閱讀文檔及源碼的方式進(jìn)一步了解了ECS架構(gòu),虛幻引擎的動(dòng)畫系統(tǒng)(IK、Rootmotion),物理引擎架構(gòu)等。此外,在撰寫網(wǎng)絡(luò)同步系列期間順便梳理了一波游戲服務(wù)器框架,并在簡(jiǎn)單了解了微服務(wù)和ServicMesh的基礎(chǔ)上對(duì)比了與部分游戲服務(wù)器框架的異同。
得益于這些積累與收獲,工作上的個(gè)人瓶頸也有了一定程度的突破,獨(dú)立/協(xié)作完成了不少功能開發(fā)和優(yōu)化,實(shí)現(xiàn)了理論與實(shí)踐的良性循環(huán)。

PS:我比較愛逛知乎,看到好的文章基本上會(huì)在當(dāng)周消化(不排除有一些太肝了,就在收藏夾吃灰了)。這里列舉一些,大家自取所需
計(jì)算機(jī)基礎(chǔ):如何設(shè)計(jì)內(nèi)存池?https://www.zhihu.com/question/25527491/answer/56571062Lua 的速度為什么比Python快???????? https://www.zhihu.com/question/25307289/answer/104643646Cache的基本原理????????????????????https://zhuanlan.zhihu.com/p/102293437網(wǎng)絡(luò)相關(guān):某百萬(wàn)DAU游戲的服務(wù)端優(yōu)化工作????????https://zhuanlan.zhihu.com/p/341855913網(wǎng)絡(luò)游戲開發(fā)中的通訊雜談?????????????https://zhuanlan.zhihu.com/p/347389861端游、手游服務(wù)端常用的架構(gòu)是什么樣的?https://www.zhihu.com/question/29779732/answer/45791817網(wǎng)絡(luò)游戲同步技術(shù)概述????????????????https://zhuanlan.zhihu.com/p/56923109幀同步(LockStep)該如何反外掛??????https://zhuanlan.zhihu.com/p/34014063微服務(wù)架構(gòu)是什么?https://www.zhihu.com/question/65502802/answer/802678798美國(guó)人如果把根域名服務(wù)器封了,中國(guó)將會(huì)從網(wǎng)絡(luò)上消失?https://zhuanlan.zhihu.com/p/185674120物理:【物理引擎系列】開篇????????????????https://zhuanlan.zhihu.com/p/42669063游戲破壞系統(tǒng)簡(jiǎn)介????????????????????https://zhuanlan.zhihu.com/p/346846195游戲物理模擬簡(jiǎn)史????????????????????https://zhuanlan.zhihu.com/p/106977617我們需要怎樣的物理引擎?https://zhuanlan.zhihu.com/p/132681462如何入門物理引擎????????????????????https://www.zhihu.com/question/28838464/answer/754834794引擎:UE4?關(guān)于主循環(huán)的資料????????????????https://zhuanlan.zhihu.com/p/225465983多線程渲染?????????????????????????https://zhuanlan.zhihu.com/p/44116722動(dòng)畫/Gameplay:Motion?Matching技術(shù)介紹和實(shí)現(xiàn)???????https://zhuanlan.zhihu.com/p/136971426游戲動(dòng)畫技術(shù)總結(jié)????????????????????https://zhuanlan.zhihu.com/p/340313373我開發(fā)的角色動(dòng)作系統(tǒng)?戰(zhàn)斗3C相關(guān)??????https://zhuanlan.zhihu.com/p/67143501戰(zhàn)爭(zhēng)迷霧機(jī)制考據(jù)????????????????????https://zhuanlan.zhihu.com/p/24828925如何實(shí)現(xiàn)一個(gè)強(qiáng)大的MMO技能系統(tǒng)——BUFF??https://zhuanlan.zhihu.com/p/150812545
3.在自媒體上持續(xù)輸出并提升自我影響力
目前我知乎的粉絲數(shù)約為2萬(wàn),CSND的閱讀量111萬(wàn),公眾號(hào)近期的平均閱讀量也由原來(lái)的300左右上升到1000左右。公眾號(hào)有44篇原創(chuàng),涵蓋游戲科普、游戲開發(fā)、C++、面試總結(jié)(面試經(jīng)驗(yàn)分享視頻)、對(duì)行業(yè)的思考和總結(jié)等。其中《使用虛幻引擎4年,我想再談?wù)勊木W(wǎng)絡(luò)架構(gòu)》一文在CSDN、GameRes等多個(gè)媒體上被大量轉(zhuǎn)載,僅在微信平臺(tái)上就收獲了超過3萬(wàn)的閱讀量。

實(shí)事求是地說(shuō),相比于其他公眾號(hào)我的更新頻率并不高,關(guān)注的粉絲也不算多。一方面是因?yàn)槲蚁MM量在不影響身體和工作的前提下保持高質(zhì)量的輸出,畢竟一個(gè)人的知識(shí)儲(chǔ)備有限,文章的質(zhì)量需要足夠多的時(shí)間進(jìn)行輸入和學(xué)習(xí)才能保證。另一方面,游戲開發(fā)的圈子相對(duì)較小,很多技術(shù)又比較精專,受眾自然有限。所以看到不少做互聯(lián)網(wǎng)基礎(chǔ)知識(shí)的公眾號(hào)半年多就有1萬(wàn)粉絲我還是很羨慕的。雖然在公眾號(hào)領(lǐng)域,游戲開發(fā)這一塊還有很多空白(大多數(shù)為娛樂化內(nèi)容),但我相信隨著游戲行業(yè)的發(fā)展和從業(yè)人員水平的提高,這些空白會(huì)越來(lái)越少。
此外,今年有接到一些廣告合作的邀約,教程推廣類偏多。除了考慮讀者的觀感,我也對(duì)教程難度與粉絲的契合度進(jìn)行了評(píng)估,并盡可能地保證每篇文章都有足夠多的干貨。今后我會(huì)選擇性地進(jìn)行推廣,并控制好質(zhì)量和頻率。因?yàn)槲沂冀K相信號(hào)主與粉絲在廣告植入這件事上是可以做到雙贏的,比如我在B站關(guān)注的不少優(yōu)質(zhì)Up主,“盜月社食遇記”,“老師好我叫何同學(xué)”,“兔叭咯”等,他們的廣告很有創(chuàng)意、與視頻內(nèi)容結(jié)合的也很好,我真的可以笑著看完。
二、我的收獲有哪些?
1.項(xiàng)目
在去年年終總結(jié)的文章里談到了游戲項(xiàng)目的分工和管理,介紹了游戲開發(fā)的一些基本規(guī)范并強(qiáng)調(diào)了流水線的重要性(簡(jiǎn)單可以概括為CI/CD持續(xù)集成系統(tǒng))。通過這一年的學(xué)習(xí)和成長(zhǎng),我對(duì)大型項(xiàng)目的推進(jìn)流程有了更為清晰的認(rèn)識(shí),也了解不少項(xiàng)目在發(fā)展中容易面臨的問題。

我認(rèn)為項(xiàng)目推進(jìn)的核心有三點(diǎn):一是做好內(nèi)容,二是減少錯(cuò)誤,三是提高效率。好的內(nèi)容需要優(yōu)秀的參與者來(lái)產(chǎn)出,而減少錯(cuò)誤和提高效率需要制作輔助工具并建立工作規(guī)范。很多時(shí)候減少錯(cuò)誤甚至比做好內(nèi)容還要重要,因?yàn)榉较蝈e(cuò)了再好的內(nèi)容也就失去了價(jià)值。有統(tǒng)計(jì)得出,程序員每產(chǎn)出1000行代碼就會(huì)出現(xiàn)70個(gè)bug,工作時(shí)間的75%其實(shí)都在修Bug(扎心但真實(shí))。既然任何團(tuán)隊(duì)/個(gè)人都無(wú)法避免錯(cuò)誤的出現(xiàn),那么通過提高效率來(lái)容錯(cuò)就顯得尤為重要。
這里簡(jiǎn)單列舉一些項(xiàng)目中可能用到的規(guī)范,
文檔平臺(tái):通用的工作流程,比如環(huán)境搭建、資源提交規(guī)范等,這些內(nèi)容成文之后甚至新人都可以直接上手。有的團(tuán)隊(duì)直接使用Gitlab作為文檔平臺(tái),也有的團(tuán)隊(duì)使用石墨文檔、Confluence等。
打包流程規(guī)范:考慮到程序代碼和資源可能會(huì)互相依賴,因此程序要保證提交的代碼不影響當(dāng)前資源,并且新的依賴性資源需在代碼合入后再提交。
資源管理規(guī)范:資源分為美術(shù)資源、配置資源、引擎特殊資源等多種類型,每種資源都有特定的規(guī)范。比如美術(shù)提交的文件大小、骨骼數(shù)量、文件格式、面數(shù)要符合程序給出的要求,配置文件要按照固定格式CRUD,引擎資源的修改與刪除流程要按照指定流程。很多時(shí)候一個(gè)不經(jīng)意的操作就可能直接引發(fā)崩潰從而影響所有人的工作,因此遵守流程上的規(guī)范能夠最大程度地使程序避免代碼/工具上的人為錯(cuò)誤。
UI規(guī)范:要規(guī)定好不同類型UI的制作流程及使用場(chǎng)景。一個(gè)優(yōu)秀的UI系統(tǒng),要有完善的UI管理模塊、易用的編輯器、合適的層級(jí)配置機(jī)制以及通用且可復(fù)用的緩存。從開發(fā)上來(lái)說(shuō),寫UI邏輯不難,但管理好UI系統(tǒng)卻并不容易。UI的特點(diǎn)是頻繁的刪除和創(chuàng)建,很容易因?yàn)閮?nèi)存泄露、內(nèi)存占用過大、GC開銷、加載卡頓、對(duì)象數(shù)量太多、分類不清晰等造成各種Bug。
對(duì)于大型的團(tuán)隊(duì),最好要有完善的可查詢可追溯的輔助信息系統(tǒng),這可以極大的提高工作效率。對(duì)于個(gè)人來(lái)說(shuō),在調(diào)試指令,編輯器工具,配表工具等效率優(yōu)化方面多做嘗試也容易在工作中展露鋒芒。
工作了這么多年,我發(fā)現(xiàn)經(jīng)驗(yàn)與視野真的非常寶貴。即使你技術(shù)很強(qiáng),基礎(chǔ)很好,沒有經(jīng)驗(yàn)一樣會(huì)浪費(fèi)許多無(wú)意義的時(shí)間/金錢。比如國(guó)內(nèi)很多團(tuán)隊(duì)做過MMO,但在其他游戲類型方面的經(jīng)驗(yàn)幾乎為0,這樣的團(tuán)隊(duì)悶頭設(shè)計(jì)的第一版甚至第二第三版FPS/ACT關(guān)卡大概率是沒法玩的(除非抄襲)。類似的,有一些新的UE4團(tuán)隊(duì)很容易因?yàn)樾畔㈤]塞在錯(cuò)誤的方向上不斷摸索,技能系統(tǒng)搞了許久,Bug卻越來(lái)越多,然而換成GAS就可以解決很多問題,一步到位。因此,項(xiàng)目在實(shí)施具體方案前一定要向有經(jīng)驗(yàn)的團(tuán)隊(duì)取取經(jīng),能直接溝通學(xué)習(xí)最好、聯(lián)系不到也要廣泛了解同一類型游戲的實(shí)現(xiàn)方案,避免走錯(cuò)方向,南轅北轍。
2.通用能力
通過這段時(shí)間文章的撰寫,我掌握了資料查詢的能力。B站做科普的Up主們都看似無(wú)所不知,其實(shí)在發(fā)布作品前他們對(duì)目標(biāo)內(nèi)容的了解可能也相當(dāng)有限,需要靠大量的相關(guān)調(diào)研做支撐。不過有經(jīng)驗(yàn)的團(tuán)隊(duì)大多數(shù)都已經(jīng)形成了相對(duì)完善的調(diào)研流程,從網(wǎng)上獲取各種參考資料自不必多說(shuō),實(shí)地考察,咨詢專業(yè)人士等都是非常有效的手段。其實(shí)即使只通過互聯(lián)網(wǎng),資料的豐富程度也已經(jīng)遠(yuǎn)超你的想象。如果你研究的領(lǐng)域有比較經(jīng)典的書籍,那一定不要錯(cuò)過,同時(shí)書籍后面的Reference,都是比較經(jīng)典的論文、官方文檔,按圖索驥就一定能獲得更多豐富的內(nèi)容。

此外,在自媒體經(jīng)營(yíng)上,我的文筆和排版布局審美確實(shí)都有了一定的提升,也掌握了一些運(yùn)營(yíng)的基礎(chǔ)知識(shí)。任何一個(gè)領(lǐng)域都有很深的門道,公眾號(hào)經(jīng)營(yíng)的難度雖算不上多高(很多做技術(shù)的朋友可能不以為意),但是想做好也并不容易。
3.技術(shù)
首先,得益于按照CSAPP這本書的內(nèi)容重新梳理了計(jì)算機(jī)體系架構(gòu),我個(gè)人的知識(shí)體系更加完善和扎實(shí),也對(duì)各種游戲技術(shù)有了更深的理解。其次,通過工作上的鍛煉和實(shí)踐,我解決問題的能力有了不小的提升,無(wú)論是從未見過的問題還是全新的知識(shí)領(lǐng)域,我都可以從容地面對(duì)了。然而有些問題確實(shí)很難在書本上找到答案,所以我平時(shí)會(huì)將工作中遇到的一些疑難雜癥進(jìn)行總結(jié)和分析,從而將其轉(zhuǎn)化為自己的經(jīng)驗(yàn)。
如果說(shuō)在哪一個(gè)具體的技術(shù)方向有所成長(zhǎng),那無(wú)疑就是研究了大半年的“網(wǎng)絡(luò)同步”了?,F(xiàn)在的我已經(jīng)可以清晰地描述幀同步/Lockstep/快照同步/狀態(tài)同步的異同并分析各種同步優(yōu)化手段的優(yōu)劣了。

4.其他
身體方面,通過堅(jiān)持不斷的有氧、健身、拉伸等運(yùn)動(dòng),今年我的身體狀況以及精神狀態(tài)相比之前好了許多。所以強(qiáng)烈建議大家保持運(yùn)動(dòng)、注意休息,我們需要一個(gè)健康抗造的身體去應(yīng)對(duì)未來(lái)幾十年的學(xué)習(xí)、工作以及各種變化。
心態(tài)方面,之前逛知乎很容易被各種大佬的炫技打擊到,但現(xiàn)在已經(jīng)不太在意了。大家都是普通人,離開自己的專業(yè)領(lǐng)域可能并無(wú)優(yōu)勢(shì)可言。你所在的位置與你的價(jià)值自然是相匹配的,找到自己可以學(xué)習(xí)的目標(biāo)并為之努力即可,與超出你水平很多的人相比只會(huì)徒增煩惱。人為什么不開心?就是因?yàn)橄氲奶唷?/span>

三、結(jié)語(yǔ)
我會(huì)在2021年完成我的C++面試經(jīng)驗(yàn)系列,并繼續(xù)做游戲技術(shù)科普(包括外掛相關(guān)、游戲發(fā)展歷史等)和游戲技術(shù)分享。如果讀者們有想看的內(nèi)容或建議,也可以評(píng)論或私信我。此外我還有個(gè)微信群和一個(gè)QQ群供大家進(jìn)行游戲技術(shù)討論,可以掃碼添加。

最后再次祝大家新年快樂,事業(yè)和學(xué)業(yè)都蒸蒸日上。
? ——Jerish
?往期文章推薦?

虛幻引擎技術(shù)系列【使用虛幻引擎4年,我想再談?wù)勊木W(wǎng)絡(luò)架構(gòu)】

游戲科普系列【盤點(diǎn)游戲中那些“欺騙玩家眼睛的開發(fā)技巧”】

C++面試系列【史上最全的C++/游戲開發(fā)面試經(jīng)驗(yàn)總結(jié)】

校招求職系列

游戲開發(fā)技術(shù)系列【想做游戲開發(fā),我應(yīng)該會(huì)點(diǎn)啥?】
游戲開發(fā)那些事
我是Jerish,網(wǎng)易游戲客戶端開發(fā)工程師,
這里會(huì)定期輸出技術(shù)干貨和游戲科普的文章
回復(fù)"gamebook",獲取游戲開發(fā)書籍
回復(fù)"C++面試",獲取C++/游戲面試經(jīng)驗(yàn)
回復(fù)"操作系統(tǒng)",獲取操作系統(tǒng)經(jīng)典書籍
游戲開發(fā)交流群(875867499)
