mmorpg arpg fps等遊戲服務端如何設計?

時間 2021-05-11 20:11:37

1樓:Prime

DNF碰撞設計和遊戲狀態同步實際上和冒險島(本人研究冒險島技術多年)的設計是相同的。

由於DNF早期的伺服器的效能不是很高,因此大部分操作都放在了客戶端進行,因此可以見到很多的吸怪、無敵等外掛程式。下面來具體說說狀態同步,其實現思路以冒險島為例:

玩家狀態同步基於幀的狀態同步

在開始設計的時候,沒有考慮很多,為了簡化操作,使用了基於幀的狀態同步,在這種模式下,即當地圖中玩家的狀態發生改變,就立即往伺服器傳送乙個狀態資料報,然後通過伺服器廣播給當前地圖中的所有玩家,其他的客戶端收到該資料報後解析並設狀態。這樣的做的優勢很明顯,簡單粗暴,同時狀態資訊準確。但是仔細分析之後,這樣的做法增大了伺服器的壓力。

舉個例子:在當前的遊戲中,遊戲的更新速率為 120 FPS,即一秒鐘更新120次。如果玩家靜止不動,則不需要傳送資料報,但是如果玩家處於移動狀態的時候,一秒鐘會向伺服器傳送120個資料報,同時伺服器需要廣播(120*PlayerCount– 1)個資料報,

假設乙個資料報的大小為10 bytes,乙個地圖有10個玩家(包括自己),那麼伺服器的頻寬為12kbps ,十分消耗伺服器效能。因此考慮在移動平台下,這種方式不可取。

基於預言的狀態同步

由於每一次移動或者改變狀態都需要傳送資料報,消耗伺服器效能。通過觀察官方設計,使用基於預言的狀態同步。

實現前提:可接受的延遲(RPG類遊戲可接受200ms左右的延遲)

struct MovementFragments

在當前的客戶端中,通過當前的位置(x,y),和當前的速度(speed),產生乙個隨機的時間duration (duration ∈(0,510)),通過這些引數算出移動過後的位置:

nextX = x + speed * duration;

nextY = y + speed * duration;

當其他客戶端收到該資料報之後,通過資料報的值,算出玩家的速度,同時移動。

OtherPlayer

.moveToUntil

(nextX

,nextY

,duration

);同時在官方的設計當中,一秒鐘將一次狀態改變拆分成了5次片段,片段的是消耗時間為乙個隨機值,但是總時間為510毫秒。因此在一次更新速度為120FPS的遊戲當中,一秒鐘只需要傳送10個資料報,大大緩解了伺服器的壓力。

怪物狀態同步

在乙個地圖當中,玩家的狀態同步之後,則需要同步地圖中怪物的位置資訊,怪物的位置資訊同步方式一般有兩種實現方式

基於客戶端的狀態同步

乙個地圖中的怪物狀態,實際上是由地圖中玩家所決定的,當玩家施加攻擊、使用技能,都會改變怪物的狀態。在MapleStroy的設計當中,怪物的位置計算是屬於離線計算,這也就是說,伺服器不參與怪物的狀態,這樣的好處是節約流量、減緩伺服器壓力,但是壞處是,會出現怪物靜止、吸怪等外掛程式手段。在移植MapleStroy的過程中,為了同步官方和考慮移動平台流量問題,因此採用此種手段。

實現策略:

怪物的位置由第乙個進入該地圖的玩家決定。這也就是說,當第乙個玩家進入該地圖之後,控制著當前地圖中所有怪物的移動狀態(這也就是為什麼這麼多吸怪了)。當第二個玩家進入該地圖之後,第乙個玩家會廣播當前所有怪物的狀態,第二個玩家根據這些資料報進行改變。

當然其他玩家發生了攻擊,或者激怒怪物的操作後,也會廣播這個訊息。

同時怪物的移動也是採用基於預言的狀態同步,大體實現和玩家移動相似。

02基於伺服器的狀態同步

伺服器的狀態同步原理很簡單,伺服器儲存並控制著怪物的狀態,因此當乙個地圖中有多個玩家的時候,廣播當前的狀態即可

2樓:

MMORPG服務端肯定要負責模擬了整個遊戲世界,只是方法很巧妙,伺服器消耗的資源在可接受範圍之內,做過MMORPG伺服器端和客戶端整體架構的人就知道其中的實現內幕。

3樓:徐波

1. 客戶端需要做模型碰撞, 但是伺服器一般情況下無需做3D碰撞. 為了效率, 伺服器會通過3D地形, 離線生成2D的可行走區域.

但魔獸因為這個原因, 出了一些作弊, 所以聽說後面好像有檢查高度. 但絕對不會把世界的模型載入到記憶體. 沒有必要.

2. 副本的英文就是Instance, 當然是在伺服器開乙個副本例項. 副本有助於分布式預算, 比世界地圖邏輯好處理

3. 伺服器跑的是純邏輯, 不跑圖形API的. 別用雙開和伺服器上萬連線來比

伺服器的記憶體不是民用機器可以想得通的. 另外, 頻寬, CPU也是恐怖級別的. 但是想在單台機器承載幾百萬人是不能達到的.

一般使用集群來處理. 原理基於: 互相沒有關係的角色, 沒必要必須在乙個伺服器程序內

4. 你相信DNF有部分採用客戶端運算麼? 因為如此, 所以才會有外掛程式. 那麼精準的碰撞, 伺服器無法做到實時同步. 當然有些運算靠客戶端完成

伺服器都是數字的世界, 沒有圖形

4樓:韋易笑

@孟亮 說的對,一般棋牌遊戲單台伺服器支援個2萬人沒什麼問題,回合RPG支援1萬人沒什麼問題,ARPG支援個6千人沒什麼問題,動作遊戲支援個4千人沒什麼問題。

5樓:

每開乙個副本肯定要建立乙個副本世界的。但是你如果多個副本放乙個執行緒內,其實也就一塊描述副本狀態的資料結構而已。比都呆野外更省資源,因為看到的人限於同副本的,狀態同步量要少於野戰。

dnf是南韓的,可以做到發個封包全屏秒殺的外掛程式,所以估計服務端完全沒檢測。

6樓:孟亮

大型mmo的服務端碰撞是抽象成相對簡單的資料結構的不是客戶端那麼精確的模型碰撞比如多層的二維陣列格仔魔獸世界不是幀同步而是客戶端先行的伺服器驗證也不是很精確不然也不會有飛天加速掛了 dnf那種類似開房間的遊戲做法不同於大型mmo 伺服器處理大量抽象資料的能力很強的而且都是分布式的不是你想象那樣一台計算機一般單個cpu只跑乙個程序單個程序只負載一部分人比如九陰單個程序負載2000人一台標準多核心伺服器可以負載很多個程序多台伺服器可以負載更多的程序剩下的就是程序之間的通訊和資料切換問題了

Unity Cocos2d x UDK 等手機遊戲開發引擎分別有什麼特性,適合開發哪些型別的遊戲?

巫布斯 我的天,UDK是什麼東西?虛幻4了,沒有UDK這個詞了!親!虛幻引擎就是虛幻引擎,Unreal Engine UDK這個詞已經消失了! 張紹源 應為Unity3D用的最多,所以單說U3D 現在的U3D實際上已經超脫出單純的遊戲引擎的範疇了,現在的U3D更合適的說法我覺得應該是乙個開放的開發框...

請問CAD,天正,廣聯達等,能用輕薄本嗎,還是遊戲本比較好,又或者超極本?

dididddddddddd 你問到廣聯達了,大概你的工作是成本造價預算啥的,這樣你不會用cad畫圖的,頂多圈面積啥的,天正八百年用一回,解決設計院的圖cad導不進廣聯達非得用天正轉一下t3這個問題,但是這個現在快速看圖會員能解決了,或者讓技術部小夥伴導一下。主要就是廣聯達了,廣聯達出了二合一以後,...

如何看待陰陽師手遊中的SSR SR R等的分檔式神?

崩塌的烏托邦 讓你能有氪金的動力和比較的勁頭。感覺yys一直想降低甚至削弱ssr的風頭,那幾波未收錄,加上六星御魂各大副本被暗改的掉率?還不夠明顯麼 雲枙 其實我覺得ssr,sr,r本質上只是稀有度的區別,有些sr,r卡的練度甚至可以與ssr卡媲美,當然要有好御魂才行 鹹魚的我T T 比如姑姑鳥,海...