1. 程式人生 > >[UE4]RPC,遠程調用

[UE4]RPC,遠程調用

查看 work 顯示 方法 進程調用 client mep thead p s

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”的目標參數賦值給誰,都會被執行,也會被傳播到其他客戶端。

技術分享圖片

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

從服務器調用的 RPC

Actor 所有權

未復制

NetMulticast

Server

Client

Client-owned actor

在服務器上運行

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

在服務器上運行

在 actor 的所屬客戶端上運行

Server-owned actor

在服務器上運行

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

在服務器上運行

在服務器上運行

Unowned actor

在服務器上運行

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

在服務器上運行

在服務器上運行

從客戶端調用的 RPC

Actor 所有權

未復制

NetMulticast

Server

Client

Owned by invoking client

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

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

在服務器上運行

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

Owned by a different client

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

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

丟棄

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

Server-owned actor

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

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

丟棄

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

Unowned actor

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

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

丟棄

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

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

[UE4]RPC,遠程調用