所有示例使用第三人稱模板創建的項目并帶有初始資源StarterContent
和Actor與Function一樣,變量也可以通過修改Replication屬性實現網絡同步,而變量的Replication屬性中有Replicated和RepNotify兩種屬性,這兩種屬性分別有什么作用呢?
首先我們操作Replicated:
1、打開 Content/StarterContent/Blueprints中的Blueprint_Effect_Fire 藍圖,在Details面板中找到并勾選Replicates 選項。
2、為藍圖添加一個Text Render組件,并調整到合適的位置。
image.png
3、準備工作完成,下面直接上藍圖。邏輯非常簡單,功能是開始運行的時候在服務器上執行CountTimer每秒+1的邏輯并且在TextReder中同步更新顯示CountTimer。
image.png
4、把藍圖拖進關卡后點擊Play開始運行。
image.png
5、但是我們將CountTimer的Replication屬性設置為Replicated呢?
image.png
其他地方不變,我們重新開始運行。
image.png
可以看到,客戶端和服務端的數字都發生了改變。因為Replicated會讓客戶端生成一個服務端的變量副本到本地。
然后,我們來試試RepNotify:
1、打開特效藍圖,修改UpdateTimer函數,增加一段變量增加到10之后不再顯示特效的邏輯。
image.png
2、編譯運行。
image.png
變量增加到10之后只有服務端隱藏了特效。
3、打開特效藍圖添加一個Deactivated的Boolean的變量并將Replication設置為RepNotify。設置之后可以看到在Functions下面生成了一個OnRep_Deactivated的函數。這是因為RepNotify會提供一個在變量更新時調用并在服務器和客戶端上同時執行的函數。
image.png
4、將隱藏特效的邏輯移到OnRep_Deactivated函數中。
image.png
5、修改UpdateTimer函數。
image.png
6、編譯運行。
image.png
此時當數字增加到10之后客戶端和服務器都隱藏了特效。
通過這次測試我們可以看出,同步變量可以將變量設置為Replicated來在客戶端生成一個變量副本,也可以設置成RepNotify,這個屬性不僅擁有Replicated的所有操作,還會提供一個函數。這個函數會在變量更新時調用并在服務器和客戶端上同時執行。