給大家科普一下歐陸娛樂(2022已更新(今日/知乎)
一、項目背景
CF手游的團隊有著相當(dāng)豐富的FPS游戲制作經(jīng)驗,但是移動端開發(fā)經(jīng)驗相對匱乏。團隊面對的挑戰(zhàn)很大,我們需要在手機端完美還原CF十多個游戲模式,上百把槍械手感。
雖然我們有實時對戰(zhàn)FPS游戲開發(fā)經(jīng)驗,但是手游網(wǎng)絡(luò)質(zhì)量很差,我們需要保證在高Ping值,高丟包率的弱網(wǎng)絡(luò)環(huán)境下流暢同步,并且避免外掛的出現(xiàn)。CF端游用戶量很大,手游也會是一個高在線的游戲。對于后臺我們希望能大幅度地提高負(fù)載,節(jié)省成本。
二、解決方案
1. 移動端實時同步技術(shù)
1.1 CF手游的C/S架構(gòu)
CF手游是競技向的手游,為了杜絕外掛,弱網(wǎng)絡(luò)下有良好表現(xiàn),注重游戲的時效性,最終選擇基于 C/S架構(gòu)使用可靠UDP作為網(wǎng)絡(luò)層的同步方案:
圖CF手游網(wǎng)絡(luò)架構(gòu)
引擎層:Unity的物理引擎是Physx。為了保證兩邊物理算法一致,我們搭建了基于Physx的物理服務(wù)器,并對其作出優(yōu)化,同時集成了Recast Navigation等高性能引擎組件為服務(wù)器提供基礎(chǔ)功能。
數(shù)據(jù)層:基于我們的關(guān)卡工具導(dǎo)出碰撞模型和關(guān)卡數(shù)據(jù)提供給服務(wù)器,保證數(shù)據(jù)一致。
游戲邏輯層:客戶端使用C#編寫,服務(wù)器為了高性能使用C++,保證核心運算一致。 客戶端和服務(wù)器都會維護一致的邏輯實體,兩邊都做移動計算,服務(wù)器會在同樣的位置進行命中傷害計算,并且通知客戶端做表現(xiàn)。服務(wù)器永遠(yuǎn)是權(quán)威,客戶端是啞終端,借此達到高強度的反外掛。
整體C/S架構(gòu)基于我們實現(xiàn)的UDP網(wǎng)絡(luò)層進行快速傳輸。
1.2 高性能的Dedicated Server與服務(wù)器負(fù)載優(yōu)化
圖CF手游服務(wù)器物理世界還原
CFM的即時對戰(zhàn)服務(wù)端(DS)是依賴虛幻3引擎開發(fā)過程中積累的經(jīng)驗,完全為手游重寫的。DS基于PhysX和Recast開源組件開發(fā),對程序性能有良好的控制。在騰訊標(biāo)準(zhǔn)M1機型配置下,單機綜合承載可以達到8000人。DS反外掛強度接近端游,單機性能比同類端游提高7-8倍。
1.3 高時效的UDP網(wǎng)絡(luò)層
游戲?qū)W(wǎng)絡(luò)有實時性要求高,帶寬要求小的特點。TCP雖然提供了可靠傳輸,但是內(nèi)置的復(fù)雜擁塞控制算法并不是專為實時性優(yōu)化的,也沒有提供較好的方法讓業(yè)務(wù)定制化。CF手游實現(xiàn)了自定義的RUDP協(xié)議方案,使用UDP保證協(xié)議實時性,同時通過自定義重傳策略兼顧可靠性,取得了很好效果,主要技術(shù)要點包括:
數(shù)據(jù)傳輸分類
CF手游中并非所有數(shù)據(jù)都要求可靠,按游戲邏輯需要,只有不到50%的協(xié)議有可靠性需求,RUDP中只對這部分協(xié)議提供可靠性保證。而非可靠包則保證盡快到達,以滿足游戲的實時性需求。對玩家移動狀態(tài)等信息,由業(yè)務(wù)層定時冗余重傳。
圖CF手游網(wǎng)絡(luò)數(shù)據(jù)傳輸分類
客戶端與服務(wù)器的交互時序如下:
圖CF手游網(wǎng)絡(luò)數(shù)據(jù)交互時序
快速發(fā)送
發(fā)送方不維護發(fā)送窗口,不等待前面包是否ack,有數(shù)據(jù)需要發(fā)送時立即發(fā)送。
快速重傳
CF手游使用比TCP更高精度,響應(yīng)速度更快的重傳策略以保證實時性。
表RUDP快速重傳策略
帶寬優(yōu)化
主要思路是有損服務(wù)和降低不必要開銷。CFM持續(xù)進行了多輪流量優(yōu)化,包括:
MTU設(shè)計為500+字節(jié),應(yīng)用邏輯保證數(shù)據(jù)包大小不超過MTU,避免拆包。
減小包頭,8字節(jié)。
小包合并。同一幀發(fā)往同一個目標(biāo)的多個小數(shù)據(jù)包合并為大包,減少包數(shù)量。
降低服務(wù)端幀率和位置精度,但不影響玩家體驗。
1.4 弱網(wǎng)絡(luò)移動同步方案
PVP實時玩家同步
CFM采用C/S架構(gòu),服務(wù)器上會執(zhí)行完整的游戲邏輯。在移動同步上,玩家的位置也是以服務(wù)器的位置為準(zhǔn),客戶端1P視角和3P視角分別進行同步和模擬。
圖CF手游玩家實時同步方案
如上圖所示,客戶端1P根據(jù)玩家的輸入調(diào)整移動方向和速度,并把相關(guān)信息上報到服務(wù)器。服務(wù)器對上報的信息進行合法性檢驗之后更新玩家的移動狀態(tài),并在每個邏輯幀下發(fā)移動信息到所有客戶端??蛻舳嗽谑盏椒?wù)器下發(fā)的移動信息,使用適當(dāng)?shù)耐剿惴▽ν婕业囊苿舆M行模擬,達到實時流暢的同步效果。其技術(shù)要點如下:
客戶端1P即時預(yù)表現(xiàn),避免網(wǎng)絡(luò)延遲帶來的操作手感遲滯的問題。
客戶端在接受玩家輸入后,會即時更新本地的移動狀態(tài),并上報服務(wù)器。在收到服務(wù)器回包之前,客戶端1P就會按照新的狀態(tài)進行移動,保證玩家的操作在第一時間得到響應(yīng)??蛻舳伺c服務(wù)器物理世界的一致性則保證了客戶端1P預(yù)表現(xiàn)的結(jié)果和服務(wù)器的移動結(jié)果是一致的。
客戶端3P進行延遲補償和預(yù)測同步,消除網(wǎng)絡(luò)因素引入的位置誤差。
在3P的同步模擬上,CFM參考了DR算法(Dead Reckoning)和影子跟隨算法等方案,并針對移動弱網(wǎng)絡(luò)的特點,加入了延遲補償和預(yù)測同步的特性,解決了在網(wǎng)絡(luò)抖動的情況下同步位置差距大和移動過程卡頓等關(guān)鍵問題??蛻舳耸盏椒?wù)器的移動信息后,會對服務(wù)器的移動路點進行過濾和合并,然后構(gòu)造出3P同步模擬的移動路徑。同時,客戶端會根據(jù)當(dāng)前與服務(wù)器的位置差距以及當(dāng)前的網(wǎng)絡(luò)延遲對模擬移動時的運動速度進行補償,從而保證客戶端3P經(jīng)過SimulateTime時間的模擬移動后與服務(wù)器的位置達到一致。
另外,在移動弱網(wǎng)環(huán)境下,網(wǎng)絡(luò)抖動會導(dǎo)致游戲過程中網(wǎng)絡(luò)瞬時延遲變大,客戶端在3P同步模擬過程中可能出現(xiàn)服務(wù)器下發(fā)的移動信息丟失或者延遲到達的問題。在這種情況下,3P模擬的移動過程就會被打斷,出現(xiàn)走走停停的卡頓現(xiàn)象。為此,CFM在同步模擬的過程中加入了預(yù)測同步,在沒有收到服務(wù)器信息的情況下,會根據(jù)玩家之前的移動狀態(tài)繼續(xù)預(yù)測移動,預(yù)測時間為2倍的網(wǎng)絡(luò)延遲。在預(yù)測移動過程中,如果收到來自服務(wù)器的移動信息,則會自動恢復(fù)為正常的同步模擬過程,從而保證了3P同步模擬過程中移動的流暢性和連續(xù)性。
服務(wù)器延時、丟包補償
丟包時,服務(wù)端可能由于移動路徑不連貫而卡在拐角處,需要有補償機制。因為傳輸延遲,從客戶端向服務(wù)器發(fā)起移動請求,到服務(wù)器開始模擬有時間差。CF手游服務(wù)端需要回溯到移動包的歷史時間,再追到當(dāng)前時間。這樣允許最多減少100-200ms內(nèi)的C/S不同步現(xiàn)象。另外當(dāng)客戶端移動路徑部分丟失后,服務(wù)端根據(jù)歷史數(shù)據(jù),嘗試推算可能的移動路徑。通過嘗試?yán)@路策略避開障礙,在較小范圍內(nèi)近似模擬客戶端路徑。
應(yīng)用平滑插值和物理力學(xué)。
在移動弱網(wǎng)環(huán)境出現(xiàn)抖動時,服務(wù)器的移動信息可能會延遲到達或者扎堆到達,導(dǎo)致客戶端3P同步模擬過程中速度陡變,移動過程忽快忽慢等問題。因此,CFM對同步模擬過程中速度的變化進行了平滑插值,保證速度的變化符合玩家對現(xiàn)實世界變速的認(rèn)知,提高游戲的真實感。另外,在進行大角度變向過程中,根據(jù)物理力學(xué)規(guī)律,玩家角色應(yīng)該遵循先減速再逆向加速的物理過程。CFM在同步模擬過程中對玩家的此類行為進行了分析判定,并實現(xiàn)了相應(yīng)的物理模型,避免玩家在變向移動時速度過快難以命中的問題,增強了游戲體驗。
PVE大規(guī)模怪物同步
CFM的多人PVE模式以末日逃生,僵尸圍城為設(shè)定,為了更好地表現(xiàn)尸潮圍堵的感覺,提高玩家闖關(guān)過程中的爽快感,必須支持大規(guī)模的怪物行為同步。面對大量怪物帶來的流量消耗及客戶端性能壓力,CFM針對PVE怪物行為的特點重新設(shè)計了低誤差,低流量消耗,支持復(fù)雜行為的同步方案。
圖CFM指令式怪物AI同步方案
支持上百AI單位的實時同步,核心問題:
服務(wù)器傷害邏輯與客戶端行為表現(xiàn)一致性;
怪物群體行為與移動同步;
大規(guī)模怪物同步流量控制;
AI命令按需發(fā)送,降低流量消耗。
在CFM的多人PVE模式中,怪物的移動信息只會在怪物移動路徑變更時進行同步,而不是傳統(tǒng)方案中的每幀同步。怪物路徑更新的頻率約為1~2秒/次,其同步流量消耗只有傳統(tǒng)方案的1/8左右。
通用怪物行為建模,對復(fù)雜怪物行為進行抽象。
CFM中怪物種類多樣,怪物行為特別是BOSS技能流程復(fù)雜,包括各種連續(xù)技和組合技。CFM怪物同步方案中對怪物的行為進行了抽象,把怪物的行為規(guī)范到統(tǒng)一的流程中,通過對服務(wù)器下發(fā)的技能指令進行解釋,生成客戶端技能狀態(tài)機,驅(qū)動怪物的復(fù)雜行為表現(xiàn)。
PVE大量怪物同步:群體行為
難點:
? 常規(guī)尋路導(dǎo)致怪物位置重疊;
? 純客戶端方案導(dǎo)致位置差異大;
解決:
? 服務(wù)器計算怪物群體力,構(gòu)造移動路徑;
? 客戶端根據(jù)下發(fā)路徑進行移動模擬;
效果:
? 保證服務(wù)器與客戶端路徑一致;
? 路徑合包下發(fā),節(jié)省流量;
? 避免客戶端尋路與碰撞計算,提高性能;
2. 移動FPS游戲手感
2.1移動端操作手感
FPS競技類游戲,對玩家操作的反應(yīng)和準(zhǔn)確性要求極高,如何在移動端實現(xiàn)良好的操作手感是個很大的挑戰(zhàn)。我們從移動、瞄準(zhǔn)和射擊三個維度進行了深度探索和優(yōu)化,不斷嘗試了幾十種手感方案,上百套參數(shù)調(diào)整,最終得到了目前的操作手感解決方案。
適配多樣屏幕的操作數(shù)學(xué)模型
我們獲取玩家的觸屏輸入Touch,通過計算Touch的位置和DeltaPosition,轉(zhuǎn)換為角色的移動加速度和視角轉(zhuǎn)向角度等。
由于屏幕的密度和手機分辨率各不一樣,相同的滑屏物理距離會得到不一樣的DeltaPos,因此CFM在操作模型計算中加入了移動設(shè)備的dpi和分辨率因子來解決一致性問題。
抖動手感數(shù)學(xué)模型
抖動的主要因素有兩個:一是觸摸的不精確性,另一個是游戲幀率的抖動。觸摸的不精確性,是由于我們手指與屏幕的接觸是一塊區(qū)域,但程序中獲取的卻是一個像素點,并且各個系統(tǒng)的實現(xiàn)也各不一致。
3D Touch
在蘋果推出的新一代多點觸控技術(shù)3D Touch后,我們立刻進行了相關(guān)的技術(shù)預(yù)研,最終實現(xiàn)了一種能完美解決操作體驗的手感方案,也成為了首款支持3D Touch的FPS手游,并申請技術(shù)專利。我們在跟隨開火的基礎(chǔ)上,加入了按壓力度來觸發(fā)開火(即3D Touch)。在iOS上,我們通過Hook UIKit的事件分發(fā),從而把按壓力度轉(zhuǎn)發(fā)到C#層來實現(xiàn)。
圖CF手游3D Touch
2.2槍械射擊手感
作為經(jīng)典第一人稱射擊游戲CF在移動平臺上的延續(xù),CFM力求為玩家還原最真實的槍械手感。CFM結(jié)合移動客戶端上玩家的操作方式進行優(yōu)化,創(chuàng)新性的設(shè)計自身的槍械彈道數(shù)學(xué)模型,此模型成為射擊游戲的標(biāo)桿:
T字彈道模型
槍械射擊時,子彈射出的最終方向主要由三個因素決定,一是槍射當(dāng)前瞄準(zhǔn)的方向,即玩家希望射擊的位置;二是槍械后座力引起的槍口上抬和左右偏向,形成T字形的主彈道;三是槍管震動和環(huán)境因素對子彈彈道形成的輕微擾動,即子彈彈道的散發(fā)。
圖CF手游槍械彈道模型
槍械后座力模型
槍械每次射出的子彈的反作用力都會導(dǎo)致槍口上抬和左右偏向,上抬和搖晃的幅度與槍械當(dāng)前連發(fā)數(shù)成正比,槍口隨著連發(fā)數(shù)的增加逐步上抬,到達最大上抬幅度后轉(zhuǎn)為隨機方向的左右擺動。
在槍械停止射擊后,游戲模擬槍口位置在玩家控制下從上抬位置恢復(fù)到初始位置,恢復(fù)的過程使用彈簧模型,遵循胡克定律。
子彈彈道散發(fā)模型
現(xiàn)實中子彈射出的時候受各種環(huán)境因素影響,會出現(xiàn)小幅度的隨機偏向,子彈的最終射出方向即是在后座力計算后的前向方向疊加上散發(fā)的偏差,彈道散發(fā)的幅度和方向符合高斯正態(tài)分布。因此CFM在實現(xiàn)槍械散發(fā)模型時也使用高斯隨機數(shù)實現(xiàn)。
創(chuàng)新輔助瞄準(zhǔn)機制
CFM在射擊上創(chuàng)新性地設(shè)計了一套輔助瞄準(zhǔn)機制,幫助玩家自動瞄準(zhǔn)靜止和低速運動的目標(biāo),降低新手玩家的操作門檻,提高新手玩家的樂趣。同時,輔助瞄準(zhǔn)在面對快速移動和轉(zhuǎn)向目標(biāo)時將失去效用,以此保證高手玩家的技術(shù)優(yōu)勢,提高玩家對技術(shù)提升的追求。
稿件合作:一元(微信:smallkisshe)
商務(wù)合作:Amber(微信:lcxk6876767)
投稿郵箱:news@GameRes.com
投訴郵箱:webmaster@GameRes.com
掃描二維碼推送至手機訪問。
版權(quán)聲明:本文由財神資訊-領(lǐng)先的體育資訊互動媒體轉(zhuǎn)載發(fā)布,如需刪除請聯(lián)系。