[UE4]RPC,遠程調用


RPC

一、Remote Procedure Call:遠程程序調用

二、一個進程調用另外一個進程上的函數

由於“Server-shoot”方法被標記為“在服務器上運行”,所以盡管是在第二個窗口(客戶端)開火,輸出的信息是:Server:准備射擊,表明這是在服務器上運行。

 

在服務器上“Server-shoot”方法又調用調用了“MutiCast-Shoot”方法,“MutiCast-Shoot”(被標記為“多路傳送”),所以服務器會通知所有客戶端都去執行這個方法。

結果就顯示:Server:全體射擊和Client 1:全體射擊。

因為沒有勾選“運行專用服務器”,因此第一個窗口同時是服務器和客戶端,“多路傳送”的時候也把消息傳送給也身兼客戶端的自己,因此就會顯示“Server:全體射擊”

二、遠程調用Actor擁有權。

  1. 如果通過Get All Actors Of Class函數獲得到客戶端A控制的角色實例賦值給標記為“在服務器端運行”的方法“Server-shoot”(目標默認是self),在客戶端B上運行(把客戶端B實例賦值給“Server-shoot”的目標參數),服務器上並不會去執行這個操作,被舍棄了,當然也不會被傳播到其他客戶端。
  2. 但如果是在服務器上調用標記為“在服務器端運行”的方法“Server-shoot”,不管“Server-shoot”的目標參數賦值給誰,都會被執行,也會被傳播到其他客戶端。

 

 

 玩家A通過執行標識為Run On Server的開槍事件來通知服務器玩家A開槍了,服務器接收到玩家A的開槍通知,通過標識為“多路傳播”的方法“開火動作”,來告訴所有客戶端的玩家A鏡像執行“開火動作”

 

下面的表格根據執行調用的 actor 的所有權(最左邊的一列),總結了特定類型的 RPC 將在哪里執行。

從服務器調用的 RPC

 

Actor 所有權

未復制

NetMulticast

Server

Client

Client-owned actor

(客戶端擁有Actor所有權)

在服務器上運行

在服務器和所有客戶端上運行

在服務器上運行

在 actor 的所屬客戶端上運行

Server-owned actor

(服務器端擁有Actor所有權

在服務器上運行

在服務器和所有客戶端上運行

在服務器上運行

在服務器上運行

Unowned actor

(沒有擁有者的Actor

在服務器上運行

在服務器和所有客戶端上運行

在服務器上運行

在服務器上運行

 

從客戶端調用的 RPC

 

Actor 所有權

未復制

NetMulticast

Server

Client

Owned by invoking client

(Actor被所調用的客戶端擁有所有權)

在執行調用的客戶端上運行

在執行調用的客戶端上運行

在服務器上運行

在執行調用的客戶端上運行

Owned by a different client

(Actor被其他客戶端擁有所有權)

在執行調用的客戶端上運行

在執行調用的客戶端上運行

丟棄

在執行調用的客戶端上運行

Server-owned actor

(Actor被服務器端擁有所有權)

在執行調用的客戶端上運行

在執行調用的客戶端上運行

丟棄

在執行調用的客戶端上運行

Unowned actor

(沒有擁有者的Actor

在執行調用的客戶端上運行

在執行調用的客戶端上運行

丟棄

在執行調用的客戶端上運行

關於RPC遠程調用更多信息查看官方文檔:http://api.unrealengine.com/CHN/Gameplay/Networking/Actors/RPCs/index.html 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM