熱門
Unity:事實or謠言,,揭秘三種常見網(wǎng)絡(luò)代碼誤區(qū)
創(chuàng)建并運營一個多人游戲并不容易,而且與單人游戲相比,,往往涉及更多的部分,,因為所有的東西都需要與其他玩家同步,以創(chuàng)建一個一致的,、共享的世界,。
多人游戲開發(fā)難題的一個核心部分是網(wǎng)絡(luò)代碼——處理游戲玩家和服務(wù)器之間“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ù)語,指的是游戲中處理客戶端和服務(wù)器之間聯(lián)網(wǎng)和同步的部分,。
在多人游戲中,,服務(wù)器和客戶端通過網(wǎng)絡(luò)發(fā)送的數(shù)據(jù)包相互通信。為了在遠(yuǎn)距離連接的游戲玩家之間創(chuàng)造一個可以共享的平臺,,如移動角色或生成對象等游戲事件可以以發(fā)送數(shù)據(jù)包的形式同步到其他客戶端,。負(fù)責(zé)通過網(wǎng)絡(luò)發(fā)送和接收數(shù)據(jù)包的部分我們稱之為“Transport(即傳輸)”。
雖然我們可以通過直接調(diào)用傳輸?shù)陌l(fā)送功能來手動發(fā)送這些數(shù)據(jù)包,,但這種模式很快會讓沒有多少多人游戲經(jīng)驗的程序員們難以承受,。
網(wǎng)絡(luò)代碼庫利用了網(wǎng)絡(luò)變量和遠(yuǎn)程步驟調(diào)用(RPC)等功能,,將發(fā)送的數(shù)據(jù)包從游戲代碼中抽離出來。
Unity有兩個網(wǎng)絡(luò)代碼包,,游戲?qū)ο蟮木W(wǎng)絡(luò)代碼(預(yù)發(fā)行)和實體的網(wǎng)絡(luò)代碼(實驗版),。
三個常見的網(wǎng)絡(luò)代碼誤區(qū)與事實
誤區(qū)1:“在游戲開發(fā)中可以隨時轉(zhuǎn)換到多人模式”
謠言:在游戲的開發(fā)周期中,多人游戲可以在開發(fā)的后期添加到頂部,。
事實:多人游戲?qū)嵤┢饋砗苡刑魬?zhàn)性,。如果你想讓玩家在游戲中體驗多人游戲,那么你應(yīng)該在設(shè)計和開發(fā)中盡早考慮添加多人游戲,。
為什么呢,?多人游戲幾乎觸及了游戲的每一個方面,所以它也影響了游戲的發(fā)展,。例如,,如果在一個游戲中有一個庫存系統(tǒng),多人游戲?qū)⑿枰綆齑嫖锲返椒?wù)器,。
在單人游戲體驗中,,也有許多相當(dāng)容易實現(xiàn)的東西,當(dāng)你試圖將它們放入多人游戲時便會非常的困難,。
你有沒有想過為什么大多數(shù)多人游戲使用運動角色控制器,,并且只有非常少的物理交互?這些游戲之所以這樣做,,是因為實現(xiàn)在多個客戶端之間共享物理模擬和預(yù)測物理模擬是一個真正令人頭疼的問題,,即使對有經(jīng)驗的開發(fā)人員來說也是如此。
這里給出的建議是盡早檢查你的游戲功能是否適合多人游戲——尤其是如果你的游戲有一個其他游戲中不常用的獨特機制,。
誤區(qū)2:“延遲越低越好”
謠言:對于多人游戲來說,,延遲越低越好。因為延遲越低,,游戲體驗越好,。
事實:雖然保持低延遲對于向玩家提供流暢的體驗很重要,但提供一致的體驗也同樣重要,。以同步狀態(tài)來創(chuàng)建一個共享的空間可能需要很少的時間,,而這對于游戲中的玩家來說影響可以說是微乎其微。
為什么呢,?為所有玩家提供流暢一致的體驗并不總是有利于實現(xiàn)低延遲,。
提高游戲流暢度和一致性最常用的技術(shù)是緩沖。
這里提到的緩沖技術(shù)不是立即處理來自網(wǎng)絡(luò)傳入的數(shù)據(jù)包,,而是將數(shù)據(jù)包放入隊列,。在每個波動點期間(游戲模擬的單次更新),客戶端從隊列中取出(理想情況下)一個數(shù)據(jù)包,并同時嘗試在隊列中保持一定大小的緩沖元素,。
這確保了當(dāng)服務(wù)器每次發(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é)奏快速按下一系列按鈕。玩家通過肌肉記憶一遍又一遍地練習(xí)來學(xué)習(xí)這些動作,。為了讓格斗游戲更加公平,,玩家角色的最終動作與給出的輸入保持一致是非常重要的。
那么很多格斗游戲是怎么做到這種一致性的呢,?他們以固定的速率輪詢輸入,,然后適當(dāng)緩沖這些輸入。通過這樣做,,他們將玩家輸入一致地映射到游戲框架上,。這樣會讓平均輸入延遲增加,但延遲會變得更加一致,。
雖然增加更多的緩沖會使游戲更流暢,,但在許多情況下,這會導(dǎo)致太多的延遲,,玩家最終會感受到他們的輸入與屏幕上的游戲動作產(chǎn)生不一致,。
這里有一些不同的技術(shù)可以應(yīng)用于獲得緩沖的平滑性而沒有延遲損失。通過使用官方客戶端游戲?qū)⑼婕医巧妮斎肓⒓磻?yīng)用到游戲當(dāng)中,,這使得本地玩家的延遲最小化,。其他玩家仍然可以緩沖數(shù)據(jù),讓敵方玩家顯示更流暢,。
雖然這種方法對玩家來說感覺很好,,但它會導(dǎo)致其他問題,因為它使作弊變得容易得多,。
對于競技游戲,,可以使用一種稱為客戶端預(yù)測的技術(shù)。它所做的是立即應(yīng)用本地玩家的輸入,但服務(wù)器也會通過應(yīng)用相同的輸入來計算玩家的動作,,并檢查客戶端是否執(zhí)行了有效的移動,,并在必要時進行糾正。
誤區(qū)3:“帶寬是免費的”
謠言:寬帶合同太便宜了,,這一定意味著帶寬是免費的,。
事實:帶寬不是免費的,不同地區(qū)的成本可能不同,,有些地區(qū)對使用的帶寬收費明顯高于其他地區(qū),。
這是為什么呢?與商業(yè)服務(wù)器的價格相比,,私人寬帶合同通常相當(dāng)便宜,。寬帶合同非常便宜的原因是因為大多數(shù)人會使用一小部分帶寬,而且很少使用,。商用服務(wù)器則非常不同,。它們通常大部分時間都在運行,游戲服務(wù)器通常支持?jǐn)?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ò)代碼的細(xì)微差別都是非常有幫助的,。
電話:010-50951355 傳真:010-50951352 郵箱:[email protected] ,;點擊查看區(qū)域負(fù)責(zé)人電話
手機:13811546370 / 13720091697 / 13720096040 / 13811548270 /
13811981522 / 18600440988 /13810279720 /13581546145