遊戲開發入門(十二)遊戲開發全總結
阿新 • • 發佈:2018-12-22
通過遊戲開發入門系列的學習,是不是對遊戲開發有了一個比較清晰的認識?
在最後一篇裡面,博主試著概括性的對遊戲開發做一個總結,歡迎各位提出意見來完善這篇部落格~
遊戲模組總結:
- 遊戲邏輯模組系統:各種武器,狀態,技能,揹包,戰鬥等邏輯系統
- 動畫模組系統:狀態機,Montage,動畫融合,IK等
- 物理模組:給需要互動表現的物件賦予物理特性(包括剛體,流體,粒子,布料等),調整重力大小等各種引數,調整互動中力的大小,調整物理約束
- AI模組: AI導航,與玩家互動等,玩家的很多功能系統也需要給AI來使用,更深層次的可以考慮將機器學習相關的內容融入
- UI模組:搭建各種介面框架(揹包,捏臉,地圖等),非常耗時間與精力,後期需要不斷調整
- 渲染模組:客戶端表現核心,不用多說,內容非常多且深
- 網路模組:底層架構,同步,網路連線 場景模組:包括地形,關卡,植被,角色管理與優化等
- 輸入與輸入處理模組:將玩家輸入處理轉換成邏輯,需要注意的有組合鍵,輸入法切換等
- 遊戲登入與更新:一般這是專門的工具組來做,比如我們常見的各種遊戲登入器,線上更新等。
這裡面的除了網路基本上都需要美術,策劃,程式共同參與與合作。
內功:
- 數學基礎:根據你所做內容來決定,一般上層邏輯比較少的去考慮到積分等高數內容。但是如果想搞圖形學,矩陣線性代數,高數必須要有一定的功底
- 演算法:常見的排序,查詢需要理解並掌握,進一步常見的還有分治,貪心,動態規劃,有時候現學現賣也是可以的。另外,除了這些基本的演算法,在遊戲領域還是有很多其他領域不太常用的演算法,比如八叉樹查詢,碰撞檢測,A*。還有一些很特殊的情況需要開發者自己去尋找合適的演算法。
- C++:基本語法,代理,名稱空間,const,繼承,記憶體結構,虛表,引用,斷言,巨集定義等
- 資料結構:首先是掌握連結串列,陣列,佇列,堆,棧,圖,樹等資料結構,然後是各種排序,查詢,遍歷等演算法。這些掌握了以後可以很快的熟悉stl或者類似的基本庫原,用的時候可以更準確的選擇合適的資料結構
- 設計模式:一般來說,我們需要設計模式來快速的搭建遊戲邏輯框架,比如前面提到的各種邏輯系統。而且還需要通過設計模式來理解引擎各個模組的設計思路。當然,如果你想設計遊戲引擎,那更不能少了設計模式了。
- 對引擎各個模組由一定深入的理解:這個不用多說,看一遍遊戲引擎架構吧,不理解寫出的程式碼經常會出現各種問題(比如同步問題),編輯器各種功能也用不好。
- 記憶體管理:可能很多引擎或者語言已經儘可能的幫你處理記憶體了,但是你難免需要在一些特殊情況下自己處理,記憶體池技術,各種C++的new的使用,不得不會。
- 對開發工具的熟悉:這裡並不是指只是對某一個引擎使用熟練,而且對不同引擎相關的內容都有一定理解,可以很快的觸類旁通。
- 編譯原理,連結,第三方庫:經常會遇到各種連結錯誤,編譯錯誤,打包錯誤,這需要你有一定的相關知識與經驗去解決這些問題。
- 效能分析與效能優化: CPU與GPU,渲染批次,渲染例項化,布料優化,網路同步資料量,物理開銷等,載入資源優化
- 對遊戲的理解:雖然不玩遊戲也一樣能參與遊戲開發,但玩過遊戲的人還是有優勢的。最明顯的是玩過遊戲的人會對遊戲有更多的想法與意見,也習慣去主動學習其他的遊戲的技術與優點。(程式這樣,策劃更是如此)
- 開發經驗:這個就比較寬泛了,難以隻言片語說清。比如你的遊戲莫名其妙的出現了一些bug,新手完全無從下手,而有經驗的人會有各種手段去除錯並解決。經驗豐富的老手有時真的抵得上N個新手的,所以這需要各位不斷的學習與實踐了。
技術點:
- 儲存與序列化(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來給予玩家補償 - 指令碼
簡單邏輯程式碼,熱更新 - 工具開發
提高美術策劃的開發效率
遊戲開發入門系列文章到這裡就結束了,希望大家有所收穫,也歡迎各位提出問題與意見來完善該系列的內容~