UE4網(wǎng)絡(luò)(一) 同步Actor

所有示例使用第三人稱模板創(chuàng)建的項(xiàng)目并帶有初始資源StarterContent


Actor同步即服務(wù)器識(shí)別并確認(rèn)Actor是否設(shè)置為同步。如果Actor設(shè)置為同步,則服務(wù)器創(chuàng)建Actor并指示客戶端創(chuàng)建和保留該Actor的復(fù)制版本。即服務(wù)器負(fù)責(zé)Actor的狀態(tài)的改變,而客戶端只是復(fù)制服務(wù)器上的Actor的狀態(tài)。

在藍(lán)圖中同步Actor:

在同步Actor之前我們需要先知道Replicate的Actor和非Replicate的Actor之間的區(qū)別。

1、找到StarterContent/Blueprints下的Blueprint_Effect_Sparks并復(fù)制兩個(gè)副本,分別命名為Fire_Rep和Fire_NoRep。

2、打開(kāi)Fire_NoRep藍(lán)圖在Details面板中找到Net Load on Client屬性并取消選中。取消選中這個(gè)選項(xiàng)后,在加載地圖時(shí)這個(gè)Actor就不會(huì)再客戶端上自動(dòng)加載。

3、編譯藍(lán)圖后打開(kāi)Fire_Rep藍(lán)圖,在Details面板中選中Replicates選項(xiàng)。

4、編譯之后將Fire_NoRep和Fire_Rep藍(lán)圖分別拖進(jìn)關(guān)卡。

可以看到我將Fire_NoRep放在了臺(tái)階下面,將Fire_Rep放在臺(tái)階上面。

5、點(diǎn)擊Play按鈕旁邊的向下箭頭,將Number of Players選項(xiàng)改為2。設(shè)置為開(kāi)啟兩個(gè)游戲窗口。

6、點(diǎn)擊Play開(kāi)始游戲。

可以看到在服務(wù)器上兩個(gè)火焰特效都有顯示,而客戶端上值顯示了Fire_Rep。因此可見(jiàn)Replicates的用處是將服務(wù)器上的Actor在客戶端上復(fù)制一個(gè)副本。

接下來(lái)我們來(lái)動(dòng)態(tài)創(chuàng)建同步的Actor:

1、將前面的兩個(gè)特效藍(lán)圖從關(guān)卡中刪掉然后從Modes視圖中拖兩個(gè)TargetPoint進(jìn)關(guān)卡,并分別命名為No_Rep和Rep。

2、然后打開(kāi)關(guān)卡藍(lán)圖,藍(lán)圖比較簡(jiǎn)單直接上圖。

這段藍(lán)圖的作用是在游戲開(kāi)始的時(shí)候在Rep點(diǎn)上創(chuàng)建一個(gè)Fire-Rep的Actor實(shí)例和在No_Rep點(diǎn)上創(chuàng)建創(chuàng)建一個(gè)Fire_NoRep的Actor實(shí)例;Switch Has Authority節(jié)點(diǎn)用來(lái)確定后面的邏輯是在服務(wù)器還是客戶端上面執(zhí)行,如果執(zhí)行這段邏輯的是服務(wù)器,就會(huì)執(zhí)行Authority后面的邏輯,如果是客戶端,就會(huì)執(zhí)行Remote后面的邏輯。這個(gè)節(jié)點(diǎn)也可以將主要判定邏輯寫(xiě)到Authority后面來(lái)防止客戶端作弊。

3、點(diǎn)擊play開(kāi)始運(yùn)行。

可以看到由于只有服務(wù)器執(zhí)行了腳本,兩個(gè)特效都顯示在服務(wù)器上,而客戶端上只顯示了設(shè)置為同步的特效。當(dāng)我們需要只在服務(wù)器或者客戶端上生成某物時(shí),Switch Has Authority節(jié)點(diǎn)非常實(shí)用。

4、回到關(guān)卡藍(lán)圖,將Switch Has Authority節(jié)點(diǎn)的Authority斷開(kāi)并連到Remote。

5、點(diǎn)擊play運(yùn)行。

可以看到因?yàn)槟_本只在客戶端上執(zhí)行,所以客戶端生成了全部特效,而服務(wù)器兩個(gè)特效都沒(méi)有生成。這種做法可以在實(shí)現(xiàn)比如收到攻擊時(shí)顯示特效這種并不需要服務(wù)器同步的效果時(shí)使用,可以有效地降低服務(wù)器的壓力。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • 最近一直沒(méi)有弄過(guò)UE4了和同事溝通的時(shí)候,看了下 Network_Features今天自己簡(jiǎn)單記錄一下等 微積分 ...
    dodo_lihao閱讀 2,672評(píng)論 0 1
  • Actor系統(tǒng)的實(shí)體 在Actor系統(tǒng)中,actor之間具有樹(shù)形的監(jiān)管結(jié)構(gòu),并且actor可以跨多個(gè)網(wǎng)絡(luò)節(jié)點(diǎn)進(jìn)行透...
    JasonDing閱讀 3,354評(píng)論 2 6
  • 本文試圖分析UE4的游戲網(wǎng)絡(luò)通信模塊,采用從先勾勒出主框架再到深入細(xì)節(jié)的探索模式。 概念介紹 UE4 GamePl...
    蛋求疼閱讀 21,819評(píng)論 5 30
  • 參考解密:騰訊如何打造一款實(shí)時(shí)對(duì)戰(zhàn)手游從《王者榮耀》來(lái)聊聊游戲的幀同步《王者榮耀》技術(shù)總監(jiān)復(fù)盤(pán)回爐歷程:沒(méi)跨過(guò)這三...
    合肥黑閱讀 22,579評(píng)論 3 41
  • 持久化 當(dāng)我們?cè)诩合到y(tǒng)中,一臺(tái)機(jī)器向另一臺(tái)機(jī)器發(fā)送一段數(shù)據(jù),負(fù)責(zé)接收的機(jī)器在接收數(shù)據(jù)前突然宕機(jī),就會(huì)造成數(shù)據(jù)丟失...
    mango_knight閱讀 4,569評(píng)論 0 4