在其所屬的客戶端上運行

在同步UMG的時候遇到的問題,反而解決了一個一直以來的疑問----在其所屬的客戶端上運行服務器

在其所屬的客戶端上運行

在擁有這個變量的Actor中執行spa

例子

去修改Widget中的Text,咱們已經讓Text顯示在屏幕上了,並綁定了Text這個變量.net

兩人遊戲中,NewPlayerController一共有三個,服務器上兩個,客戶端一個(解釋點擊跳轉),而服務器上的是沒有必要去渲染UI的,因此咱們要在本地的NewPlayerController中去渲染UI。blog

NewPlayerController藍圖節點

在本地的NewPlayerController中建立Widget遊戲

PS:能夠這麼認爲服務器的NewPlayerController便是本地,是權威的,由於服務器上的NewPlayerController就存在服務器裏,並且只有一個事件

GameMode藍圖節點

儲存服務器上的兩個PlayerController(兩個權威版的PlayerController)get

NewPlayerController藍圖節點

按下「Q」去呼叫GameMode的事件同步

GameMode藍圖節點

歷遍全部的PlayerController,轉化爲咱們兩個NewPlayerController,這裏須要注意兩點變量

  • 有關於服務器的NewPlayerController,由於服務器只有一個NewPlayerController,因此轉化沒有問題。
  • 有關於客戶端的NewPlayerController,由於客戶端有兩個NewPlayerController,因此轉化可能會出現問題

一般來講,這樣已經能夠更新Widget的Text這個變量了。可是由於咱們的Widget都是在本地建立的,因此客戶端的權威版/服務器上的NewPlayerController是沒有建立Widget,這樣運行不但不會獲得預期的效果,並且還會報錯,因此咱們得修改一下Update這個事件。渲染

update事件改成在其所屬的客戶端上運行 

意思就是哪一個NewPlayerController擁有Widget這個變量,就轉換爲哪一個NewPlayerController。很明顯,客戶端的只有本地的NewPlayerController纔有Widget這個變量,因此就轉換爲本地的NewPlayerController,並修改了Widget的Text變量。

相關文章
相關標籤/搜索