遊戲開發入門總結
第一篇文章本來想直接寫UE4專欄的,但是最近工作太忙,就先簡單對遊戲開發入門做個總結吧~
進入遊戲行業兩年多了,處於一邊實踐一邊學習的狀態,一開始身邊沒有牛人引導感覺確實浪費了一些時間。偶然在Gad上看到一個遊戲開發入門系列的視頻,覺得內容挺全面的,就定了一個月的計劃把這些課程都看完了,收穫不小,對遊戲開發有了更為全面的認識。
如果你想進入遊戲行業,覺得學習資料太多很難入門,那不妨先看看這個系列的視頻。我對每個課程都做了筆記,如果課程中遇到了什麼問題,隨時可以向我提問。(也許你更傾向於問知乎上的各類大神~)
鏈接:遊戲開發入門系列
看完這些,你應該對遊戲開發有一個大致的了解(配合遊戲引擎架構這本書效果更佳),算是踏入遊戲行業一半了。然後,參考一下Milo大神給出的遊戲開發必備的學習書單 ,按照你想深入的方向開始潛心修鍊吧!
在這篇文章里,我試著概括性的對遊戲開發做一個總結,希望讓大家對遊戲開發能有一個基本的認識,也歡迎各位提出意見和建議~
遊戲開發基本功:
- 數學基礎:根據你所做內容來決定,一般上層邏輯比較少的去考慮到積分等高數內容。但是如果想搞圖形學,矩陣線性代數,高數必須要有一定的功底
- 演算法:常見的排序,查找需要理解並掌握,進一步常見的還有分治,貪心,動態規劃,有時候現學現賣也是可以的。另外,除了這些基本的演算法,在遊戲領域還是有很多其他領域不太常用的演算法,比如八叉樹查找,碰撞檢測,A*。還有一些很特殊的情況需要開發者自己去尋找合適的演算法。
- C++:基本語法,代理,命名空間,const,繼承,內存結構,虛表,引用,斷言,宏定義等
- 數據結構:首先是掌握鏈表,數組,隊列,堆,棧,圖,樹等數據結構,然後是各種排序,查找,遍歷等演算法。這些掌握了以後可以很快的熟悉stl或者類似的基本庫原,用的時候可以更準確的選擇合適的數據結構
- 設計模式:一般來說,我們需要設計模式來快速的搭建遊戲邏輯框架,比如前面提到的各種邏輯系統。而且還需要通過設計模式來理解引擎各個模塊的設計思路。當然,如果你想設計遊戲引擎,那更不能少了設計模式了。
- 對引擎各個模塊由一定深入的理解:這個不用多說,看一遍遊戲引擎架構吧,不理解寫出的代碼經常會出現各種問題(比如同步問題),編輯器各種功能也用不好。
- 內存管理:可能很多引擎或者語言已經儘可能的幫你處理內存了,但是你難免需要在一些特殊情況下自己處理,內存池技術,各種C++的new的使用,不得不會。
- 對開發工具的熟悉:這裡並不是指只是對某一個引擎使用熟練,而且對不同引擎相關的內容都有一定理解,可以很快的觸類旁通。
- 編譯原理,鏈接,第三方庫:經常會遇到各種鏈接錯誤,編譯錯誤,打包錯誤,這需要你有一定的相關知識與經驗去解決這些問題。
- 性能分析與性能優化: CPU與GPU,渲染批次,渲染實例化,布料優化,網路同步數據量,物理開銷等,載入資源優化
- 對遊戲的理解:雖然不玩遊戲也一樣能參與遊戲開發,但玩過遊戲的人還是有優勢的。最明顯的是玩過遊戲的人會對遊戲有更多的想法與意見,也習慣去主動學習其他的遊戲的技術與優點。(程序這樣,策劃更是如此)
- 開發經驗:這個就比較寬泛了,難以隻言片語說清。比如你的遊戲莫名其妙的出現了一些bug,新手完全無從下手,而有經驗的人會有各種手段去調試並解決。經驗豐富的老手有時真的抵得上N個新手的,所以這需要各位不斷的學習與實踐了。
遊戲模塊總結:
- 遊戲邏輯模塊系統:遊戲玩法核心,包括各種武器,狀態,技能,背包,戰鬥等邏輯系統
- 動畫模塊系統:狀態機,Montage,動畫融合,IK等
- 物理模塊:給需要交互表現的對象賦予物理特性(包括剛體,流體,粒子,布料等),調整重力大小等各種參數,調整交互中力的大小,調整物理約束
- AI模塊: AI導航,與玩家交互等,玩家的很多功能系統也需要給AI來使用,更深層次的可以考慮將機器學習相關的內容融入
- UI模塊:搭建各種界面框架(背包,捏臉,地圖等),非常耗時間與精力,後期需要不斷調整
- 渲染模塊:客戶端表現核心,不用多說,內容非常多且深
- 網路模塊:底層架構,同步,網路連接
- 場景模塊:包括地形,關卡,植被,角色管理與優化等
- 輸入與輸入處理模塊:將玩家輸入處理轉換成邏輯,需要注意的有組合鍵,輸入法切換等
- 遊戲登錄與更新:一般這是專門的工具組來做,比如我們常見的各種遊戲登錄器,在線更新等。
這裡面的除了網路基本上都需要美術,策劃,程序共同參與與合作。
技術點:
- 存儲與序列化(protobuf) 單機玩家的遊戲存檔如何實現?通過序列化 socket 搭建基本的TCP/UDP通信系統
- 反外掛
保證遊戲公平性,一般伺服器上做各種校驗措施
- 多線程 一般用於渲染,物理,網路同步等,減少開銷,增加cpu利用率
- 打包流水線,包的大小優化,包的多層遞歸引用優化等
- 資料庫 什麼數據要存在資料庫裡面,什麼存在本地就可以。應該選擇什麼資料庫?之後會不會出現遊戲合服?
- CDN /伺服器的部署與運行等 這個也很複雜,又要考慮成本又想容納更多玩家(網遊),有時可能需要用到CDN技術來優化網路同步,另外還要考慮成本等問題來決定是否租用雲伺服器
其他:
- 版本控制
一般使用git或者svn
- 性能分析工具 前面提到了性能優化,優化前我們需要各種工具來輔助我們找到影響遊戲效率的瓶頸
- 配置 需要大量策劃配置的數據存放在哪裡?配置文件?XML?這需要構建一套小的系統(或者引擎提供)
- 聲音數據處理 一般引擎提供基本的音樂與音效處理,但是有的引擎對音頻方面處理的更深入,效果更好
- 平台對接
遊戲需要發布到不同的平台,這個平台不僅僅指硬體平台(Android,iOS,PS4,PC,XBOX)還包括各種軟體平台(各種應用商店,如PC上的Steam,WeGame。安卓上的應用寶,各種軟體管家等)該過程其實也相當繁瑣,有一些平台的審核非常嚴格,需要積累一定的經驗才能快速的處理相關內容
- 國際化與本地化 簡單來說,就是不同國家的語言版本不同。如果你的遊戲不是只賣給英國美國,你就不得不面對本地化,坑很多
- 日誌系統 開發與運營 遊戲上線一定很多bug,你又沒辦法去玩家電腦上調試,如何快速定位bug,日誌系統很有效
- 調試
- 開發期 斷點調試(最有效)、日誌調試、dump調試 、控制台調試,可視化調試(在場景內繪製特定的幾何體),截圖錄屏調試(一般用於調試渲染,動畫等)
- 上線期 日誌調試、伺服器可以用dump調試,也可以想辦法把客戶端的dump傳送到伺服器 、管理員GM調試(非常重要,可以避免重啟伺服器)
- bug處理 有時候已經發生的bug無法改變,又不能及時修復,想要彌補玩家,可以通過GM來給予玩家補償
- 腳本 簡單邏輯代碼,熱更新
- 工具開發 提高美術策劃的開發效率
推薦閱讀:
※如何評價新白娘子傳奇?
※如何評價熱血青春?
※如何評價《西遊·降魔篇》?
※網易版的建設我的世界,為什麼這麼多人排斥?
※穿越火線中的徽章系統是什麼呢?