技能模塊的同步

這里所說的技能模塊包括:技能流程铲敛、法術(shù)場、彈道和buff籽孙。

首先介紹authority和proxy的概念烈评,這兩個概念是基于單位unit的基礎(chǔ)上進(jìn)行的區(qū)分。
authority表示單位的主控端犯建,即此單位是由客戶端和還是服務(wù)端控制讲冠。對于玩家avatar,玩家本地的客戶端就是主控端适瓦。而對于怪物竿开,他們的行為由服務(wù)端控制,主控端就是服務(wù)端玻熙。
proxy表示代理端否彩,表示被主控端控制。如對于怪物來說嗦随,所有的客戶端都是proxy胳搞;對于玩家A來說,服務(wù)端和其他玩家的客戶端都是proxy。

0 技能同步的原則

1.客戶端先行
對于玩家控制的單位來說肌毅,玩家點擊按鈕釋放一個技能筷转,客戶端首先響應(yīng),單位播放動作以及相應(yīng)的技能特效悬而。

據(jù)我了解呜舒,有的已上線游戲并沒有做客戶端先行,而是所有的技能執(zhí)行請求都發(fā)給服務(wù)端笨奠,然后由服務(wù)端發(fā)起袭蝗。
這種模式技能流程控制會比較簡單,但是在網(wǎng)絡(luò)環(huán)境差的情況下般婆,體驗可能差一些到腥。但是,目測也是可以接受的蔚袍。

2.技能流程以authority為發(fā)起端
玩家單位技能發(fā)起是由她的客戶端乡范,怪物的技能發(fā)起是由AI也就是服務(wù)端。
3.技能結(jié)算在服務(wù)端發(fā)起啤咽。
技能真正的結(jié)算晋辆,比如法術(shù)場檢測、buff結(jié)算宇整、傷害結(jié)算等瓶佳,統(tǒng)一在服務(wù)端處理。

1 技能執(zhí)行流程的同步

這里所說的技能執(zhí)行流程指的是技能樹的一個執(zhí)行節(jié)點的流程鳞青。

技能流程負(fù)責(zé)動作霸饲、特效以及技能結(jié)算,其中技能結(jié)算包括:釋放法術(shù)場臂拓、彈道或buff厚脉。

一個技能執(zhí)行節(jié)點的執(zhí)行流程中,需要同步的有兩個時間點:

  • 技能開始:技能開始播放動作
  • 技能結(jié)算:前搖結(jié)束埃儿,即能進(jìn)入結(jié)算邏輯器仗。這類同步消息往往并不是由技能本身去同步,而是技能生成了法術(shù)場童番、彈道等精钮,他們?nèi)プ鱿鄳?yīng)的同步。

以玩家點擊技能按鈕開始釋放技能為例介紹技能同步流程剃斧,如圖所示:

Paste_Image.png

1.主控端點擊技能按鈕轨香,技能開始播放動作,主控端告訴服務(wù)端技能開始幼东。
2.服務(wù)端廣播給所有的客戶端(多玩家場景)臂容,告知其他所有的客戶端此玩家開始執(zhí)行技能科雳。其他客戶端收到指令后可是播放技能表現(xiàn)。
3.服務(wù)端延遲一段時間后脓杉,服務(wù)端開始進(jìn)行技能結(jié)算糟秘,并且將結(jié)算結(jié)果通知客戶端。

延遲時間=技能前搖時間-上行-下行球散,下行一半不能確定尿赚,所以默認(rèn)為上行=下行

另一種中庸的計算方式是:延遲時間=技能前搖時間-上行,防止要求技能前搖時間過長

使用此同步流程的表現(xiàn)為:

1.要求技能前搖時間>2*網(wǎng)絡(luò)延遲蕉堰,若前搖時間短凌净,則延遲時間=0,效果可能差一些
2.authority客戶端表現(xiàn)完美屋讶。
3.proxy client表現(xiàn)一般冰寻,即玩家A看玩家B的效果為:玩家B剛開始執(zhí)行技能動作,沒到前搖時間就進(jìn)行了技能結(jié)算皿渗。但是因為玩家一般也不會過分關(guān)注其他玩家的動作斩芭,所以是可以接受的。

2 技能樹的同步

我上篇文章技能系統(tǒng)已經(jīng)介紹羹奉,我們游戲使用的是技能樹來管理技能流程秒旋。那么就面臨一個問題约计,技能樹如何同步诀拭。

最簡單最暴力的方式,是客戶端和服務(wù)端同時管理技能樹煤蚌,并且將其狀態(tài)同步耕挨。這樣,客戶端和服務(wù)端的技能樹狀態(tài)統(tǒng)一尉桩、完備筒占。

后來發(fā)現(xiàn),對于proxy端蜘犁,并不需要完備的技能樹信息翰苫,最節(jié)省的方式是proxy根本不接受技能樹同步信息,只是接受播放動作这橙、技能結(jié)算等信息奏窑。但這樣需要告訴其他proxy播放什么動作、特效等屈扎。

在我們系統(tǒng)中埃唯,技能同步包括三類同步消息:

  • 技能根節(jié)點enter (root_enter): 表示一個大技能的進(jìn)入
  • 技能葉子節(jié)點enter(action_enter): 表示一個技能樹的執(zhí)行節(jié)點的進(jìn)入。
  • 根節(jié)點exit(root_exit) :表示大技能結(jié)束

根節(jié)點保存一個完整技能的信息鹰晨,需要和技能模塊外部交互墨叛,因此需要知道技能的開始和結(jié)束止毕。
葉子節(jié)點的執(zhí)行代表著技能真正的執(zhí)行邏輯,也需要同步漠趁。
而對于其他節(jié)點扁凛,作為流程控制節(jié)點,只需要在主端確保技能流程無誤即可

后來這里進(jìn)行了進(jìn)一步的優(yōu)化闯传,對于純根節(jié)點令漂,主控端(玩家控制的客戶端)將信息同步給服務(wù)端,服務(wù)端不再同步給其他客戶端丸边。有的技能樹只有一個節(jié)點叠必,那么按照葉子節(jié)點的策略,主控端同步給服務(wù)端妹窖,服務(wù)端廣播給所有的其他客戶端纬朝。

3 技能結(jié)算的同步

技能結(jié)算包括創(chuàng)建法術(shù)場、buff骄呼、彈道共苛、技能直接傷害等。

法術(shù)場蜓萄、彈道的同步

法術(shù)場隅茎、彈道的同步比較類似,他們都作為一個entity(網(wǎng)絡(luò)同步單元)在服務(wù)端創(chuàng)建嫉沽,創(chuàng)建以后使用entity管理機(jī)制服務(wù)端通知客戶端他們的創(chuàng)建和銷毀辟犀。

以法術(shù)場為例,法術(shù)場的執(zhí)行和同步流程:

  1. 服務(wù)端發(fā)起創(chuàng)建一個法術(shù)場绸硕,并且通知客戶端
  2. 法術(shù)場每隔一段時間結(jié)算一次堂竟,注意,法術(shù)場結(jié)算并不需要同步玻佩,每隔一段時間服務(wù)端執(zhí)行檢測邏輯出嘹,客戶端播放結(jié)算特效等。兩個邏輯互不依賴咬崔,也不要求時間一致税稼。
  3. 當(dāng)法術(shù)場結(jié)算時檢測到攻擊目標(biāo)時,服務(wù)端計算攻擊傷害等信息垮斯,并將攻擊信息發(fā)給客戶端郎仆。
  4. 客戶端收到傷害信息,客戶端播放相應(yīng)的表現(xiàn)甚脉,如法術(shù)場受擊特效等丸升。此處還包括屬于通用模塊的跳字等。
  5. 當(dāng)服務(wù)端的法術(shù)場時間到了進(jìn)行destroy時牺氨,使用entity的管理機(jī)制通知所有客戶端destroy法術(shù)場狡耻。

彈道的同步類似墩剖,唯一的區(qū)別就是法術(shù)場在某一位置使用攻擊盒檢測目標(biāo),而彈道是一個移動的子彈夷狰,客戶端表現(xiàn)是一個特效在飛岭皂,而服務(wù)端每隔一段時間根據(jù)飛行速度等使用膠囊攻擊盒去檢測目標(biāo)碰撞。

由以上可以發(fā)現(xiàn)沼头,法術(shù)場作為一個entity他的管理成本是比較高的爷绘,所以若策劃想出一些需求需要使用多個法術(shù)場實現(xiàn),一般通過拓展法術(shù)場功能使用一個法術(shù)場來實現(xiàn)进倍。

比如土至,策劃要做一個冰火兩重天法術(shù)場,即法術(shù)場在每次結(jié)算時使用不同的參數(shù)猾昆,第一次結(jié)算使用火焰陶因,第二次結(jié)算是冰霜。若這種需求較少垂蜗,可以使用兩個法術(shù)場楷扬,但是如果要冰火雷毒水電風(fēng)魔奧術(shù)神圣***N重天,則代價太大贴见。一般可以讓法術(shù)場支持每次使用不同的結(jié)算參數(shù)來結(jié)算即可烘苹。

buff同步

buff是附加在unit身上的東西(沒有unit就沒有buff,但是沒有unit可能有法術(shù)場)片部,所以不需要使用entity來同步镣衡。

  1. 服務(wù)端確定buff是否可以掛在unit上面。
  2. 客戶端和服務(wù)端都維護(hù)一個buff管理器吞琐,掛buff的消息通知所有客戶端捆探,客戶端負(fù)責(zé)表現(xiàn)然爆,服務(wù)端負(fù)責(zé)結(jié)算即可站粟。

4 傷害、屬性的同步

主要介紹下傷害的同步曾雕,順便附帶介紹下屬性同步奴烙。

對于傷害結(jié)算來說,技能剖张、buff切诀、法術(shù)場和彈道都可能造成傷害,當(dāng)服務(wù)端發(fā)現(xiàn)造成傷害時搔弄,服務(wù)端首先根據(jù)技能信息計算傷害值幅虑,計算以后將信息通過技能模塊發(fā)送給所有客戶端,所有客戶端接到信息后首先播放技能傷害相關(guān)的表現(xiàn)顾犹,如受擊特效等倒庵,然后播放跳字等通用傷害客戶端表現(xiàn)褒墨。

buff可能修改單位屬性,如攻擊力擎宝、攻擊速度等郁妈。單位的屬性由基礎(chǔ)成長屬性+裝備屬性+buff屬性構(gòu)成,前兩個屬性為面板屬性绍申,屬于玩家信息噩咪。而buff屬性只在戰(zhàn)斗中有效,在面板中并沒有表現(xiàn)极阅。
因此裝備屬性的同步需要通知邏輯服務(wù)器(真正的服務(wù)器)胃碾,而buff并不需要通知邏輯服務(wù)器。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末筋搏,一起剝皮案震驚了整個濱河市书在,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌拆又,老刑警劉巖儒旬,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異帖族,居然都是意外死亡栈源,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進(jìn)店門竖般,熙熙樓的掌柜王于貴愁眉苦臉地迎上來甚垦,“玉大人,你說我怎么就攤上這事涣雕〖枇粒” “怎么了?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵挣郭,是天一觀的道長迄埃。 經(jīng)常有香客問我,道長兑障,這世上最難降的妖魔是什么侄非? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮流译,結(jié)果婚禮上逞怨,老公的妹妹穿的比我還像新娘。我一直安慰自己福澡,他們只是感情好叠赦,可當(dāng)我...
    茶點故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著革砸,像睡著了一般除秀。 火紅的嫁衣襯著肌膚如雪窥翩。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天鳞仙,我揣著相機(jī)與錄音寇蚊,去河邊找鬼。 笑死棍好,一個胖子當(dāng)著我的面吹牛仗岸,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播借笙,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼扒怖,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了业稼?” 一聲冷哼從身側(cè)響起盗痒,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎低散,沒想到半個月后俯邓,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡熔号,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年稽鞭,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片引镊。...
    茶點故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡朦蕴,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出弟头,到底是詐尸還是另有隱情吩抓,我是刑警寧澤,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布赴恨,位于F島的核電站疹娶,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏嘱支。R本人自食惡果不足惜蚓胸,卻給世界環(huán)境...
    茶點故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望除师。 院中可真熱鬧,春花似錦扔枫、人聲如沸汛聚。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽倚舀。三九已至叹哭,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間痕貌,已是汗流浹背风罩。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留舵稠,地道東北人超升。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像哺徊,于是被迫代替她去往敵國和親室琢。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,979評論 2 355

推薦閱讀更多精彩內(nèi)容