Multiplayer Game Pattern (Part 1)
多人即時的遊戲玩起來就是有趣 !
常常讓人不知不覺地就深陷其中, 無法自拔.
不論是合作類型的, 亦或是競爭類型的, 1 vs 1 的, 團體公會戰的, 都有非常多的玩家不斷的在線上線下熱烈的討論與研究, 有的甚至進而改變社會與世界的經濟人文發展.🎯
現實世界的電腦與網路技術年年翻新, 從早期的魔電(Modem)連網開始出現的文字型 MUD, 到現在的手機即時連線, 豐富又隨時可玩的多人連線對戰像是 1 vs 1 的 Clash Royale《部落衝突:皇室戰爭》, Hearthstone《爐石戰記:魔獸英雄傳》等等. 像下圖的就是最初的多人連線文字遊戲的戰鬥畫面…
以最近(2016)最火熱的手遊: Pokemon Go, 還有已經紅很久的桌機: 魔獸世界 World of Warcraft 來說, 多人連線的種類與機制也總是不斷的在進化; 每每的出現在人們的眼前, 每每的肯定受到玩家們的熱愛, 不儘開發商/營運商/代理商們賺錢, 玩家們也享受在豐富即時互動的遊戲世界之中. 👻 👾 🤖
多人遊戲型態 Multiplayer Game Type
那麼, 怎麼設計多人/即時的遊戲機制呢?
它有什麼架構可以參考呢?
網路技術得研究多深才能寫出一套線上遊戲呢?
Pokemon Go 是多人連線遊戲嗎?
動物之森(どうぶつの森)是即時線上遊戲嗎?
嗯.. 可以問的問題很多很多, 我們先來看看現今的多人遊戲的型態~
FPS → First Person Shooter = 第一人稱射擊遊戲
回合的玩家人數: 100人以內
存檔: ✘
熱門遊戲: Quake 2, Call of Duty, BattleField 4
RTS → Real Time Strategy = 即時策略(戰略)遊戲
回合的玩家人數: 8 人以內
存檔: ✘
熱門遊戲: StarCraft, WarCraft, Command and Conquer, Clash Royale
MMO → Massively Multiplayer Online = 大規模(巨量)多人連線遊戲
回合的玩家人數: 千人以上
存檔: ✔︎, 玩家與世界的狀態, 玩家的裝備/金錢, NPC的狀態
熱門遊戲: WorldOfWarcraft, WarCommander, FireFall
MOBA → Multiplayer Online Battle Arena = 多人線上戰術競技遊戲
回合的玩家人數: 通常 10 人以內
存檔: ✘
熱門遊戲: LeagueOfLegends, DefenseOfTheAncients
Sandbox → Multiplayer Sandbox = 多人(單人)沙箱遊戲
回合的玩家人數: 通常 50人以內
存檔: ✔︎, 玩家與世界的狀態
熱門遊戲: MineCraft , Trove, 動物之森
TCG → Trading Card Game = 線上卡牌對戰遊戲
回合的玩家人數: 1 vs 1
存檔: ✔︎, 玩家金錢與狀態
熱門遊戲: HearthStone
Cassino → Casino Card Game = 博益牌類遊戲
回合的玩家人數: 2~5 人
存檔: ✘
熱門遊戲: 德州撲克, 在台灣也有著各式各樣的博益類遊戲
Simulation → Community Simulation Game = 社群式模擬遊戲
回合的玩家人數: 通常 50人以內
存檔: ✔︎, 玩家與世界的狀態
熱門遊戲: TheSims4, 動物之森
嗯.. 還有其它的分類嗎? 有的, 而且還有不少變化種, 上面所列只是一些常見的, 分類上還有許多種可以列舉, 發展上也不斷的有新品種會出現, 像是最近很熱門的 Clash Royale, 乍看之下會像是二人對戰的卡牌類型遊戲, 但其實它的底層則是 MOBA/RTS 類型的多人即時線上遊戲.
那麼, 最基本的”網路架構”是如何做成的呢?
可以怎麼運用現在先進的軟體技術來達成呢?
多人連線 X 網路架構
如何透過網路軟體的技術做成多人遊戲呢? 尤其是 Photon Engine 這套工具, 可以幫助我們建立什麼樣的連線遊戲世界與運作機制呢?
讓我們先來瞭解一下基本的網路知識. 現今大部份的網路遊戲設計的構成, 主要就二大類, 一種是 Client-Server, 另一個是 PeerToPeer, 其它的就是以這二類再來做不同的小型變化.
Client-Server
這種概念的想法非常簡單, 就是所有的 Client (Player) 都連上一台固定的主機 (Server, Host), 可以是架在雲端的虛擬機上, 例如是 Google Cloud Platform, Microsoft Azure, Amazon EC2 等; 也可以是架在自家公司, 個人工作室(家裡)的主機上, 而所有的玩家就連上這台Server 就好.
簡單的說, Server 就是對於每一個 Client 而言, 最主要的提供資料跟服務者. 在開發遊戲時, 常見的使用時機, 就是二個或以上的 Client 連上同一台 Server 來傳送互相的資料跟遊戲的狀態給各別的玩家, Server 上會記錄所有相關的資料. 當其中二個玩家互傳資料時, 也就只有這二個玩家會收到訊息, 其它的玩者可以不用知道這個資訊, 所以在網路頻寬的消耗上, 可以減少不必要的傳送資料, 每一個 Client 也可以不用知道所有其它使用者的所有資訊, 也就不用花 CPU/Memory 的資源來處理或是過濾不必要的資料.
所以它的優點是:
- 中心化: 所有的商業運算邏輯會跑在主機上, 資料的管理, 玩家的狀態存取, 遊戲世界的事件, 與外界其它服務的串接等等.
- 可離散式的機制: 可以在 Server 端跑不同的元件, 或是有不同的 Server處理不同的事件, 分散遊戲的運算的工作量, 減輕遊戲開發上要做的設計/測試/維護/建置的工作量等.
- 減化 Client 工作量: 不須要有一個特別的 Client 端來當所有的事件同步傳送者, 分享資料也不用同時在網路上傳來傳去, 不會因為某個主要的 Client 掛掉或是離線而所有在回合內的玩家資料全部掛點,
Peer-To-Peer
這種模式, 並不須要一個獨立的主機來做中心點的訊息處理與傳送. 每一個 Peer (Client, Player) 傳送資料時, 會同步送給其它的玩家, 並且會接收到所有的玩家所傳過來的資料. 所以可以想見的是, 通常同一局裡的遊戲玩家數, 不會太多, 早期, 因為網路速度不像現在那麼的快速, 就算是做成 Local Network 區域網路, 多人即時遊戲也不會設計成太多人一起玩, 頂多 4~8 人的資料傳送就會有很多問題要處理了; 但即使是這樣, 遊玩起來也是非常有趣的.🎮😬
定義上, 點對點(端對端)的網路連線系統, 因為二個以上的端點獨立且直接的與網路上其它端點連接, 沒有中心的 Server 來做資料交換或處理, 所以可能會在其中的一個端點做成一個虛擬的Host 來處理同步機制.
所以它的優點是:
- 簡化的設定: 我們只要知道使用者的輸入, 把變動的資料送到其它所有連上的 Client, 處理其它的Client 傳送過來的資料並反應. 所以早期也常用於 Turn-Based 回合制的遊戲上.
- 快速的資料傳送: 因為資料是傳送到直接連上的 Client 端, 並沒有透過網路上的其它節點, 所以任何的輸入輸出(User Input, UI, Database) 都可以很快的反應與改變.
- 網路連結較可靠: 如果某些玩家(Client)下線或是不活動, 並不會影響到其它的玩家連線運作, 遊戲世界也許會因為少了些玩家而有變化, 但網路的資料運作並不會因此而掛點; 例如有某個固定中心式的 Server 機制, 如果 Server 掛掉, 那所有玩家就沒有人可以繼續玩~
隨著遊戲設計者的世界觀變化, 遊戲開發團隊的研發能力增進;
以及硬體規格的突破, 網路底層技術快速的發展;
透過網路串連介接的品質進步, 軟體的架構豐富廣泛;
多人在線的網路技術與運用, 已然進入新的盛世! 👾 💕 🎯 👏🏻
瞭解了現今的網路遊戲分類, 以及網路程式的基本架構優缺點, 我們可以再來看看, 下一篇, Multiplayer Game 會用上的簡單網路 Protocol / Socket 基礎知識, 以及它們是怎麼在多人連線上運作的~
.