經(jīng)常能看到類似“如何入門游戲開發(fā),?游戲開發(fā)需要掌握哪些技能,?”這樣的問題,,下面試著概括性的對游戲開發(fā)所需要的技能做一個總結(jié),,希望大家對游戲開發(fā)能有一個基本的認(rèn)識!
640.webp.jpg (158.65 KB)
下載附件
2020-6-5 14:20 上傳
游戲開發(fā)基礎(chǔ)要求高么,?
和其他程序猿一樣,,要想做一名優(yōu)秀的游戲開發(fā)者,底子不能差,,算法,,數(shù)據(jù)結(jié)構(gòu),語言等基礎(chǔ)一個都不能少,。當(dāng)然,,除了這些基本功外,還要對游戲有比較深入的理解,,比如看到一個功能就能猜出或給出一個大概的實現(xiàn)思路,。
看一下游戲開發(fā)的基本功有哪些:
數(shù)學(xué)基礎(chǔ):根據(jù)你所做內(nèi)容來決定,一般上層邏輯比較少的去考慮到積分等高數(shù)內(nèi)容,。但是如果想搞圖形學(xué),,矩陣線性代數(shù),高數(shù)必須要有一定的功底
算法:常見的排序,,查找需要理解并掌握,,進(jìn)一步常見的還有分治,貪心,,動態(tài)規(guī)劃,,有時候現(xiàn)學(xué)現(xiàn)賣也是可以的,。另外,除了這些基本的算法,,在游戲領(lǐng)域還是有很多其他領(lǐng)域不太常用的算法,,比如八叉樹查找,碰撞檢測,,A*,。還有一些很特殊的情況需要開發(fā)者自己去尋找合適的算法。
C++(C#):基本語法,,模板,,代理,,命名空間,,const,繼承,,內(nèi)存結(jié)構(gòu),,虛表,引用,,斷言,,宏定義等
數(shù)據(jù)結(jié)構(gòu):首先是掌握鏈表,數(shù)組,,隊列,,堆,棧,,圖,,樹等數(shù)據(jù)結(jié)構(gòu),然后是各種排序,,查找,,遍歷等算法。這些掌握了以后可以很快的熟悉stl或者類似的基本庫原,,用的時候可以更準(zhǔn)確的選擇合適的數(shù)據(jù)結(jié)構(gòu)
設(shè)計模式:一般來說,,我們需要設(shè)計模式來快速的搭建游戲邏輯框架,比如前面提到的各種邏輯系統(tǒng),。而且還需要通過設(shè)計模式來理解引擎各個模塊的設(shè)計思路,。當(dāng)然,如果你想設(shè)計游戲引擎,,那更不能少了設(shè)計模式了,。
對引擎各個模塊由一定深入的理解:這個不用多說,看一遍游戲引擎架構(gòu)吧,,不理解寫出的代碼經(jīng)常會出現(xiàn)各種問題(比如同步問題),,編輯器各種功能也用不好,。
內(nèi)存管理:可能很多引擎或者語言已經(jīng)盡可能的幫你處理內(nèi)存了,但是你難免需要在一些特殊情況下自己處理,,內(nèi)存池技術(shù),,各種C++的new的使用,不得不會,。
對開發(fā)工具的熟悉:這里并不是指只是對某一個引擎使用熟練,,而且對不同引擎相關(guān)的內(nèi)容都有一定理解,可以很快的觸類旁通,。
編譯原理,,鏈接,第三方庫:經(jīng)常會遇到各種鏈接錯誤,,編譯錯誤,,打包錯誤,這需要你有一定的相關(guān)知識與經(jīng)驗去解決這些問題,。
性能分析與性能優(yōu)化: 主要就是三個方面——內(nèi)存,,CPU,GPU,。著手點有渲染批次,,渲染實例化,布料優(yōu)化,,網(wǎng)絡(luò)同步數(shù)據(jù)量,,物理開銷等,加載資源優(yōu)化(包的合并),,裁剪,,聲音文件加載,LOD,,美術(shù)資源制作規(guī)范化等,。調(diào)試的時候可以使用引擎內(nèi)置工具,進(jìn)一步的細(xì)節(jié)可以采用Intel的VTune工具,。
對游戲的理解:雖然不玩游戲也一樣能參與游戲開發(fā),,但玩過游戲的人還是有優(yōu)勢的。最明顯的是玩過游戲的人會對游戲有更多的想法與意見,,也習(xí)慣去主動學(xué)習(xí)其他的游戲的技術(shù)與優(yōu)點,。(程序這樣,策劃更是如此)
開發(fā)經(jīng)驗:這個就比較寬泛了,,難以只言片語說清,。比如你的游戲莫名其妙的出現(xiàn)了一些bug,新手完全無從下手,而有經(jīng)驗的人會有各種手段去調(diào)試并解決,。經(jīng)驗豐富的老手有時真的抵得上N個新手的,,所以這需要各位不斷的學(xué)習(xí)與實踐了。
經(jīng)常聽別人說游戲開發(fā)很復(fù)雜,,復(fù)雜在哪呢,?
總結(jié)來說就是內(nèi)容太雜,細(xì)分又太深,。隨便舉兩個技術(shù)方向(渲染,,AI)就夠你無限深入了。還有一些模塊,,說難不算太難,,但是內(nèi)容相當(dāng)復(fù)雜,需求變更頻繁,,處理不好就如無底洞一般~
那么我們簡單的對游戲模塊做一個總結(jié):
游戲邏輯模塊系統(tǒng):游戲玩法核心,,包括各種武器,狀態(tài),,技能,,背包,戰(zhàn)斗等邏輯系統(tǒng)
動畫模塊系統(tǒng):狀態(tài)機,,Montage,動畫融合,,IK等
物理模塊:給需要交互表現(xiàn)的對象賦予物理特性(包括剛體,,流體,粒子,,布料等),,調(diào)整重力大小等各種參數(shù),調(diào)整交互中力的大小,,調(diào)整物理約束
AI模塊: AI導(dǎo)航,,與玩家交互等,玩家的很多功能系統(tǒng)也需要給AI來使用,,更深層次的可以考慮將機器學(xué)習(xí)相關(guān)的內(nèi)容融入
UI模塊:搭建各種界面框架(背包,,捏臉,地圖等),,非常耗時間與精力,,后期需要不斷調(diào)整
渲染模塊:客戶端表現(xiàn)核心,不用多說,,內(nèi)容非常多且深
網(wǎng)絡(luò)模塊:底層架構(gòu),,同步,網(wǎng)絡(luò)連接
場景模塊:包括地形,,關(guān)卡,,植被,,角色管理與優(yōu)化等
輸入與輸入處理模塊:將玩家輸入處理轉(zhuǎn)換成邏輯,需要注意的有組合鍵,,輸入法切換等
游戲登錄與更新:一般這是專門的工具組來做,,比如我們常見的各種游戲登錄器,在線更新等,。
這里面的除了網(wǎng)絡(luò)基本上都需要美術(shù),,策劃,程序共同參與與合作,。
游戲開發(fā)僅僅是寫邏輯代碼么,?
當(dāng)然,不是~~~ 游戲也是一個軟件項目,,是一個需求變化極為頻繁的項目,。當(dāng)你跳出底層的邏輯程序員時,你會發(fā)現(xiàn)你還有好多事情要去做,。
比如:
版本控制:一般使用git或者svn
存儲與序列化(如protobuf):單機玩家的游戲存檔需要通過序列化,。游戲中的同步系統(tǒng)也需要通過序列化 對象來搭建
反外掛:保證游戲公平性,一般服務(wù)器上做各種校驗措施,,這個東西真的不容易,,而且又麻煩,身邊懂得人真的不多,,我本身也很希望有高人指點一二
多線程優(yōu)化:一般用于渲染,,物理,網(wǎng)絡(luò)同步等,,減少開銷,,增加cpu利用率
數(shù)據(jù)庫:什么數(shù)據(jù)要存在數(shù)據(jù)庫里面,什么存在本地就可以,。應(yīng)該選擇什么數(shù)據(jù)庫,?之后會不會出現(xiàn)游戲合服數(shù)據(jù)庫合并?合并的Key怎么處理,?
CDN /服務(wù)器的部署與運行等:這個也很復(fù)雜,,又要考慮成本又想容納更多玩家(網(wǎng)游),有時可能需要用到CDN技術(shù)來優(yōu)化網(wǎng)絡(luò)同步,,另外還要考慮成本等問題來決定是否租用云服務(wù)器
實現(xiàn)網(wǎng)絡(luò)穿透 :對于玩家自己開房間類的游戲,,需要我們提供網(wǎng)絡(luò)穿透的手段,才能讓兩個內(nèi)網(wǎng)的玩家鏈接并通信,。有的時候,,網(wǎng)絡(luò)穿透技術(shù)平臺會提供,不需要自己造輪子。
使用性能分析工具:前面提到了性能優(yōu)化,,優(yōu)化前我們需要各種工具來輔助我們找到影響游戲效率的瓶頸(如VTune)
配置:需要大量策劃配置的數(shù)據(jù)存放在哪里,?配置文件?XML,?這需要構(gòu)建一套小的系統(tǒng)(或者引擎提供)
聲音數(shù)據(jù)處理:一般引擎提供基本的音樂與音效處理,,但是有的引擎對音頻方面處理的更深入,效果更好
平臺對接:游戲需要發(fā)布到不同的平臺,,這個平臺不僅僅指硬件平臺(Android,iOS,PS4,PC,XBOX)還包括各種軟件平臺(各種應(yīng)用商店,,如PC上的Steam,WeGame。安卓上的應(yīng)用寶,,各種軟件管家等)該過程其實也相當(dāng)繁瑣,,有一些平臺的審核非常嚴(yán)格,需要積累一定的經(jīng)驗才能快速的處理相關(guān)內(nèi)容
國際化與本地化:簡單來說,,就是不同國家的語言版本不同,。如果你的游戲不是只賣給英國美國,你就不得不面對本地化,,坑很多
日志系統(tǒng):開發(fā)與運營 游戲上線一定很多bug,,你又沒辦法去玩家電腦上調(diào)試,如何快速定位bug,,日志系統(tǒng)很有效
調(diào)試與維護(hù):
開發(fā)期 斷點調(diào)試(最有效),、日志調(diào)試、dump調(diào)試 ,、控制臺調(diào)試,,可視化調(diào)試(在場景內(nèi)繪制特定的幾何體),截圖錄屏調(diào)試(一般用于調(diào)試渲染,,動畫等)
上線期 日志調(diào)試、服務(wù)器可以用dump調(diào)試,,也可以想辦法把客戶端的dump傳送到服務(wù)器(做一個內(nèi)置的自動收集客戶端dump程序) ,、管理員GM調(diào)試(非常重要,可以避免重啟服務(wù)器)
bug處理:
嚴(yán)重?fù)p失的bug 有時候已經(jīng)發(fā)生的造成玩家嚴(yán)重?fù)p失的bug(如玩家投入大量時間,、金錢獲取的)無法改變,,又不能及時修復(fù),想要彌補玩家,,可以通過GM來給予玩家補償,。
游戲崩潰性bug 需要在游戲上線的前兩天,把發(fā)生概率高的所有Bug通過Dump調(diào)試后盡快修復(fù)并更新
腳本:簡單邏輯代碼,,熱更新
打包流水線,,包的大小優(yōu)化,包的多層遞歸引用優(yōu)化等:整個項目從編譯到配置再到打包需要哪些處理,要注意哪些配置等
工具開發(fā):針對特殊需求開發(fā)特定的工具來提高程序,、美術(shù),、策劃的開發(fā)效率
當(dāng)然,上面的內(nèi)容還遠(yuǎn)不足以覆蓋游戲開發(fā)的所有內(nèi)容,,我會在后面學(xué)習(xí)的時間里繼續(xù)擴充,。 而且學(xué)習(xí)任何東西都需要一個過程,我們不需要一開始就掌握這么多東西,。日積月累,,我們都有可能稱為一名優(yōu)秀的游戲開發(fā)者。
|