1. 程式人生 > >UE4 Run On owing Client解析(RPC測試)

UE4 Run On owing Client解析(RPC測試)

owin server char 沒有 client trigger -1 產生 inventory

  今天看到文檔中遊戲性指南->遠程調用函數->在藍圖中使用遠程調用函數的 Run On Owning Client 在所有權的客戶端上運行部分,發現把Add Item和Remove Item設置為Not Replicated時,跟示例的效果並沒有區別,下面將分析這種情況的原因和其中的原理。

  1,首先解釋上面這種情況的原因,該示例使用的是第三人稱模板,在Character裏寫了一個String變量Inventory,設置如圖:

技術分享

在場景中放置一個Trigger Box,在關卡藍圖添加BeginOverlap和EndOverlap事件:

技術分享

AddItem和RemoveItem:打印一個字符串並給Character裏的Inventory賦值。

技術分享

技術分享

在示例中這兩個事件設置為Run On owing Client,遊戲運行起來的效果是當服務器的Character進入Trigger時,會調用服務器的Character的AddItem,當切換到客戶端的Character進入Trigger時,會調用客戶端的Character的AddItem,但是這是依賴Trigger重疊的Actor來分別調用的,跟AddItem這個函數的同步屬性沒有關系。根據RPC中的圖表:

技術分享

可以看到當在服務器調用RPC時,如果actor的所有權是服務器,那調用的函數是notreplicated、server、client時的結果都是在服務器上執行,示例中是在Triggerbox的Overlap事件調用的AddItem,所以AddItem屬於Triggerbox,而Triggerbox的所有權是服務器,AddItem都是在服務器上執行的,所以AddItem函數的這幾個選項的結果都是一樣的。

下面是關於RPC的一些試驗:

1,Level Blueprint存在於服務器和客戶端,GameMode存在於服務器(這個都知道-.-)

2,槍開火的函數應該如何實現?

  技術分享

  根據文檔說明,Run on owing client必須放在以上Actor中執行,否則服務器不知道要給哪個客戶端執行,所以一種方法是開火的函數設置為Run On Server,並且把產生的粒子特效設為復制,這樣所有客戶端都能看到效果.

  還有一點需要註意,虛幻采用的是客戶端服務器模式,一個客戶端是不能直接與任何一個客戶端通信的!!!但是可以模擬這個行為,創建兩個函數,第一個為Run On Server,第二個為Multicast,第一個函數只負責調用第二個函數,第二個函數為創建開火的粒子特效,這樣創建的粒子特效不用復制也能有同樣的效果。

UE4 Run On owing Client解析(RPC測試)