iT邦幫忙

第 11 屆 iT 邦幫忙鐵人賽

DAY 1
5

我想很多人開始學習寫程式的原因是想要製作遊戲,我最初也是希望當一個遊戲設計師,雖然後來開始寫程式的契機是架設網站。不過終究還是走上了跟遊戲開發相關的道路,還記得在小時候玩過的 MMORPG (大型多人線上遊戲)或者是像是世紀帝國、星海爭霸等等可以連線的遊戲,在當時是覺得非常神奇的。

單機遊戲跟連線遊戲都各有特色,不過如果想開發一款可以連線互動的遊戲,最基本需要哪些技術呢?

遊戲開發在程式開發中也算是一個比較難獲取知識的領域,雖然這幾年隨著 Unity 以及各種引擎的開放跟出現門檻變得相對低,但是還是有很多東西是一般人難以學到的想要學習的話就必須到遊戲公司裡面學習這些經驗。

不過,如果你已經具備了基本的程式設計能力或者在大學讀相關科系,網路連線相關的撰寫能力其實是已經具備了!只是問題在於,我們去實作這些「實驗品」的過程中,總是會有一個疑問在腦海中出現,到底「這樣做適不適合?」實際上我們開發一款連線遊戲缺少的不是技術,而是與之對應的經驗。

扣掉以遊戲引擎為範例的書籍,這幾年跟遊戲相關的書就不多。如果還要再找到是連線遊戲相關的就更加困難了,2019 年初讀完了網絡遊戲核心技術與實戰這本書,雖然對於連線遊戲的設計概念更加清晰,但是還是保持著疑問「我該怎麼做比較好?」

運氣不錯的是,在今年八月初日本一款連線對戰型的網頁遊戲 Unlight 公開了原始碼,這款在亞洲地區還算熱門的遊戲在 2017 年因為營運問題停止運作,不過在接手遊戲資料的公司嘗試下以 Open Source 的方式重新釋出(圖片、音樂素材還是採用 CC-BY-ND 的形式)

筆者作為一個原玩家和工程師馬上就開始嘗試恢復遊戲的運作,目前和朋友營運著叫做 Open Unlight 版本的伺服器,既然有這麼好的機會讓我們學習遊戲的營運、維護以及可以直接地了解到連線遊戲的原始碼,肯定是要跟大家分享一下的。

原本的規劃是想跟大家分享怎麼去閱讀 Unlight 的原始碼,不過將近 30 萬行的伺服器跟客戶端程式碼明顯是無法在短短 30 天內說明清楚,即使單獨的邏輯不複雜但是混合之後所需要的相關知識跟前提都無法好好的詳細討論。

不過,作為學習新事物最重要的就是能有一個「成果」因此這三十天的計畫就是能做出一個可以動的連線遊戲原型。

前面約半個月的時間會跟大家討論開發連線遊戲需要的兩個技巧——伺服器與客戶端的連線、指令系統以及最基本的遊戲狀態管理,後面半個月的時間我們則透過實作的方式一步步驗證前面我們在閱讀 Unlight 原始碼所了解到的機制是否能夠支持我們做出一個基本的連線遊戲,並且是「可以維護」的程度。

這次的目標不是單純「可以連線」而是從 Unlight 中學習能夠營運接近十年的經驗跟技巧,來開發出能夠輕鬆擴充、維護的遊戲伺服器。

我的個人部落格是弦而時習之平常會把自己發現的一些新技巧紀錄在上面,也歡迎大家來逛逛。


下一篇
Day 02 - Client 與 Server 的溝通 - 暖身一下
系列文
從讀遊戲原始碼學做連線遊戲30

1 則留言

0
心原一馬
iT邦新手 4 級 ‧ 2019-09-15 21:22:01

你好,我是心原一馬,
小馬以前也很喜歡這款遊戲的,
蠻期待你寫這個系列的,
也很好奇30天中能開發到什麼程度呢?
期待你的作品哦。

在準備這系列的時候發現想要寫出連線遊戲真的不難,但是要寫出可以維護的遊戲就需要從這些難得出現的專案來學經驗,所以目標是完成一個簡單可以運作的遊戲,並且能夠慢慢擴充成完整的遊戲。

我要留言

立即登入留言