所有示例使用第三人稱模板創建的項目并帶有初始資源StarterContent
Function Replicateion(簡稱RPC)是在本地調用但在其他機器上遠程執行的函數。RPC可以實現客戶端或服務器之間相互發送消息。RPC可以設置為Reliable或Unreliable,其中Reliable調用必定發生,而Unreliable調用可能會因為網絡問題被丟棄。因此大多處理視覺效果的RPC應該設置為Unreliable來避免過多地占用網絡。
RPC主要包括Multicast(廣播)、Run On Server(在服務端執行)和Run On Owning Client(在客戶端執行)三種類型。其中廣播類型在服務器上調用執行,然后自動轉發給客戶端;在服務端執行的函數有客戶端調用,然后僅在服務器執行。在客戶端執行的函數由服務器調用,然后僅在自己的客戶端上執行。
在藍圖中使用RPC:
Mulitcast:
1、打開ThirdPersonBP/Blueprints中的ThirdPersonCharacter藍圖,添加一個按下空格時在玩家為之生成火焰特效的事件。藍圖非常簡單直接上圖。
2、更改Number of Players改為4后運行。
可以看到所有窗口只有自己按下空格時才能生成火焰特效并且只能看到自己的特效。
3、在ThirdPersonCharacter藍圖添加一個MulticasTest事件并將Replicates設置為Multicast,將藍圖改為如圖所示。
4、點擊Play運行。
看到服務器上生成的特效在所有客戶端都能看到,而客戶端生成的特效只有自己才能看到。
Run On Server:
重復步驟3將Replicates分別改為Run On Server。此處直接上效果圖。
此時不論誰按空格鍵,只有服務器上相應的角色可以生成特效,客戶端并不能看到任何效果。如果想要在客戶端也能看到效果,我們需要確保特效設置為Replicates。
打開特效藍圖,并選中Replicates選項后重新開始運行。
所有客戶端都能夠看到全部的特效。
Run on owning Client:
1、打開ThirdPersonCharacter藍圖,創建一個String類型的變量Inventory并設置為Instance Editable和Replicated
2、添加按P鍵打印Inventory的事件藍圖。
3、在場景中添加一個Box Trigger
4、取消Rendering下面的Actor Hidden In Game
5、添加藍圖,重疊觸發器時,如果重疊發生在服務器上,在服務器上運行 Add Item 事件,并將它復制到自己的客戶端;當人物退出觸發器盒時,在服務器上運行 Remove Item 事件,并將其復制到自己的客戶端。其中Add Item 和 Remove Item 事件為自定義事件,并且Replicates屬性全都為Run on owning Client。
6、編譯運行。
可以看出剛開始啟動時,每個角色打印的都為空,當一個角色進入觸發器后會顯示文本Item added ,按P時文本改為"has the item ",人物退出觸發器會打印“Item Removed”,再次按P會打印空字符