在這段**中獲取gm的時候伺服器是能獲取到的客戶端得到的是空的因為gamemode只存在於伺服器。
所以客戶端就不能呼叫角色的禁用輸入和在螢幕上顯示ui了。
但是伺服器上執行的這條**在客戶端上也執行了,這條**屬於後台執行
所以我們要在客戶端上呼叫上面的這個方法要怎麼辦呢?複製?可是客戶端上根本就獲取不到gamemode這個類例項。
想要複製gamemode要用到ue4gameplay架構中的的gamestate這個類
在編輯器中建立基於gamestatebase的c++類。
gamestate就相當於乙個小容器裡面裝的是伺服器gamemode中需要複製的東西。然後建立網路組播(多播)的方式複製給每個客戶端。
如下:下面的函式在伺服器上被呼叫後會傳送資訊給客戶端然後客戶端會在本地呼叫該函式。
感覺是不是很像之前使用的replicatedusing標籤繫結的onrep函式呢
方法的實現有點像之前呼叫伺服器方法
需要在方法名後面加上_implememtation
禁用原來gm中的pawn→disableinput方法
在gm類中伺服器呼叫然後多播到各個客戶端。
要get伺服器上的gs需要在gm中設定gs
記得加上標頭檔案
現在客戶端也能使用禁用輸入的邏輯了。
UE4屬性條件複製
ue4中屬性被註冊進行複製後,將再也無法再取消註冊。那麼,如何對屬性複製過程進行更細化的控制呢?可以通過傳入條件列舉來設定對應的屬性複製功能。使用示例 void utest getlifetimereplicatedprops tarray outlifetimeprops const 條件列舉說明...
UE4 多播(廣播)
只有伺服器才有許可權做廣播,所以要判斷確保是伺服器端才做廣播,有以下幾種方法 一 使用 switch has authority 判斷是否在伺服器端 因為character一定是在伺服器端建立出來的,而且也預設開啟 複製 選項,因此character中碰撞體事件會同時在伺服器和客戶端發生,因此在網路...
UE4聯網開發翻譯(七)
藍圖中,rpc是通過建立customevent 自定義事件 來建立的和設定它們成為replicate屬性。rpc不能有返回值!所以函式不能建立它們。replicates核取方塊可用於標記rpc是否可靠傳輸。勾選確保執行而不是丟失。note 不要把所有rpc都標記成可靠的!消耗資源還慢 要在c 裡面用...