創(chuàng)建并運營一個多人游戲并不容易,,而且與單人游戲相比,,往往涉及更多的部分,因為所有的東西都需要與其他玩家同步,,以創(chuàng)建一個一致的,、共享的世界。
多人游戲開發(fā)難題的一個核心部分是網(wǎng)絡(luò)代碼——處理游戲玩家和服務器之間“how”和“what”通信的代碼部分,。
然而,,“網(wǎng)絡(luò)代碼”這個詞常常會為人們帶來不好的印象,經(jīng)常被歸咎于延遲和糟糕的多人游戲體驗。
在本文中我們將帶領(lǐng)大家深入探討這些常見的誤解,,并一一證實關(guān)于網(wǎng)絡(luò)代碼的誤解,,這有助于推動更多的創(chuàng)作者使用網(wǎng)絡(luò)代碼創(chuàng)建多人游戲。
什么是網(wǎng)絡(luò)代碼,?
Netcode指的是多人游戲開發(fā)中的“創(chuàng)建”部分,,是一個總括術(shù)語,指的是游戲中處理客戶端和服務器之間聯(lián)網(wǎng)和同步的部分,。
在多人游戲中,,服務器和客戶端通過網(wǎng)絡(luò)發(fā)送的數(shù)據(jù)包相互通信。為了在遠距離連接的游戲玩家之間創(chuàng)造一個可以共享的平臺,,如移動角色或生成對象等游戲事件可以以發(fā)送數(shù)據(jù)包的形式同步到其他客戶端,。負責通過網(wǎng)絡(luò)發(fā)送和接收數(shù)據(jù)包的部分我們稱之為“Transport(即傳輸)”。
雖然我們可以通過直接調(diào)用傳輸?shù)陌l(fā)送功能來手動發(fā)送這些數(shù)據(jù)包,,但這種模式很快會讓沒有多少多人游戲經(jīng)驗的程序員們難以承受,。
網(wǎng)絡(luò)代碼庫利用了網(wǎng)絡(luò)變量和遠程步驟調(diào)用(RPC)等功能,將發(fā)送的數(shù)據(jù)包從游戲代碼中抽離出來,。
Unity有兩個網(wǎng)絡(luò)代碼包,,游戲?qū)ο蟮木W(wǎng)絡(luò)代碼(預發(fā)行)和實體的網(wǎng)絡(luò)代碼(實驗版)。
三個常見的網(wǎng)絡(luò)代碼誤區(qū)與事實
誤區(qū)1:“在游戲開發(fā)中可以隨時轉(zhuǎn)換到多人模式”
謠言:在游戲的開發(fā)周期中,,多人游戲可以在開發(fā)的后期添加到頂部,。
事實:多人游戲?qū)嵤┢饋砗苡刑魬?zhàn)性。如果你想讓玩家在游戲中體驗多人游戲,,那么你應該在設(shè)計和開發(fā)中盡早考慮添加多人游戲,。
為什么呢?多人游戲幾乎觸及了游戲的每一個方面,,所以它也影響了游戲的發(fā)展,。例如,如果在一個游戲中有一個庫存系統(tǒng),,多人游戲?qū)⑿枰綆齑嫖锲返椒掌鳌?/p>
在單人游戲體驗中,,也有許多相當容易實現(xiàn)的東西,當你試圖將它們放入多人游戲時便會非常的困難,。
你有沒有想過為什么大多數(shù)多人游戲使用運動角色控制器,,并且只有非常少的物理交互?這些游戲之所以這樣做,,是因為實現(xiàn)在多個客戶端之間共享物理模擬和預測物理模擬是一個真正令人頭疼的問題,,即使對有經(jīng)驗的開發(fā)人員來說也是如此。
這里給出的建議是盡早檢查你的游戲功能是否適合多人游戲——尤其是如果你的游戲有一個其他游戲中不常用的獨特機制,。
誤區(qū)2:“延遲越低越好”
謠言:對于多人游戲來說,,延遲越低越好。因為延遲越低,游戲體驗越好,。
事實:雖然保持低延遲對于向玩家提供流暢的體驗很重要,,但提供一致的體驗也同樣重要,。以同步狀態(tài)來創(chuàng)建一個共享的空間可能需要很少的時間,,而這對于游戲中的玩家來說影響可以說是微乎其微。
為什么呢,?為所有玩家提供流暢一致的體驗并不總是有利于實現(xiàn)低延遲,。
提高游戲流暢度和一致性最常用的技術(shù)是緩沖。
這里提到的緩沖技術(shù)不是立即處理來自網(wǎng)絡(luò)傳入的數(shù)據(jù)包,,而是將數(shù)據(jù)包放入隊列,。在每個波動點期間(游戲模擬的單次更新),客戶端從隊列中取出(理想情況下)一個數(shù)據(jù)包,,并同時嘗試在隊列中保持一定大小的緩沖元素,。
這確保了當服務器每次發(fā)送一個數(shù)據(jù)包時,客戶端也總是每次處理一個數(shù)據(jù)包,。
但是為什么要這樣做呢,?原因很簡單,如果客戶端立即處理傳入的數(shù)據(jù)包,,它不是也會收到一個數(shù)據(jù)包嗎,?在完美的網(wǎng)絡(luò)條件下,這是完全可能實現(xiàn)的,,但是通過網(wǎng)絡(luò)傳輸?shù)臄?shù)據(jù)包可能都有不同的傳輸延遲,。
每個數(shù)據(jù)包的往返時間(RTT)的波動我們稱為“抖動”。緩沖便是一種增加延遲但減少抖動的技術(shù),,我們最終會通過緩沖(增加延遲)以為多人游戲提供更多的一致性從而改善玩家體驗,。
示例:格斗游戲通常需要玩家以正確的節(jié)奏快速按下一系列按鈕。玩家通過肌肉記憶一遍又一遍地練習來學習這些動作,。為了讓格斗游戲更加公平,,玩家角色的最終動作與給出的輸入保持一致是非常重要的。
那么很多格斗游戲是怎么做到這種一致性的呢,?他們以固定的速率輪詢輸入,,然后適當緩沖這些輸入。通過這樣做,,他們將玩家輸入一致地映射到游戲框架上,。這樣會讓平均輸入延遲增加,但延遲會變得更加一致,。
雖然增加更多的緩沖會使游戲更流暢,,但在許多情況下,這會導致太多的延遲,玩家最終會感受到他們的輸入與屏幕上的游戲動作產(chǎn)生不一致,。
這里有一些不同的技術(shù)可以應用于獲得緩沖的平滑性而沒有延遲損失,。通過使用官方客戶端游戲?qū)⑼婕医巧妮斎肓⒓磻玫接螒虍斨校@使得本地玩家的延遲最小化,。其他玩家仍然可以緩沖數(shù)據(jù),,讓敵方玩家顯示更流暢。
雖然這種方法對玩家來說感覺很好,,但它會導致其他問題,,因為它使作弊變得容易得多。
對于競技游戲,,可以使用一種稱為客戶端預測的技術(shù),。它所做的是立即應用本地玩家的輸入,但服務器也會通過應用相同的輸入來計算玩家的動作,,并檢查客戶端是否執(zhí)行了有效的移動,,并在必要時進行糾正。
誤區(qū)3:“帶寬是免費的”
謠言:寬帶合同太便宜了,,這一定意味著帶寬是免費的,。
事實:帶寬不是免費的,不同地區(qū)的成本可能不同,,有些地區(qū)對使用的帶寬收費明顯高于其他地區(qū),。
這是為什么呢?與商業(yè)服務器的價格相比,,私人寬帶合同通常相當便宜,。寬帶合同非常便宜的原因是因為大多數(shù)人會使用一小部分帶寬,而且很少使用,。商用服務器則非常不同,。它們通常大部分時間都在運行,游戲服務器通常支持數(shù)百名玩家的流量,。因此,,托管公司按每千兆字節(jié)使用量收費是很常見的。
這意味著節(jié)省帶寬對于降低運營成本非常重要,。除此之外,,擁有一款帶寬使用率較低的游戲?qū)⒆尵W(wǎng)速較慢的玩家更好地享受你的游戲。
多人游戲中最常見的延遲原因之一是用戶家庭網(wǎng)絡(luò)的擁塞,。雖然這種情況經(jīng)常發(fā)生,,因為網(wǎng)絡(luò)上有其他繁重的流量,如視頻流,,但降低游戲的帶寬成本仍有助于改善玩家體驗,。
打造你的下一個多人游戲
建立一個多人游戲雖然富有挑戰(zhàn)性,,但在游戲完成的同時也非常有成就感。無論你是在打造下一部《皇家保衛(wèi)戰(zhàn)》,,還是一部擁有舒適性的在線合作游戲,,了解這些網(wǎng)絡(luò)代碼的細微差別都是非常有幫助的。