目前對網絡理解還是比較混亂,有沒有高人有合適的文章,麻煩在評論區中貼出來,幫助我學習,謝謝
思想:
爲啥要有server 和 client,是爲了多人玩,多人交互,提高可玩性。
爲了安全性,一切邏輯判斷、決策、結果都有server處理。有了結果,怎麼把結果同步到client中呢,ue4有一套的框架來實現。
最終的目的是讓client的內容和server一樣。
1、一個actor 標記爲 replicates時 ,當runtime的時候 在server端場景中生成這個actor,就會自動同步到client上,client上也會生成同樣的這個actor。僅僅在runtime時 server端生成時,纔會同步,生成之後actor中各種參數變化不會自動同步。
2、
【server上動態生成和在level中放置好一個actor 這兩種效果是一樣的】
server 動態生成可同步的 a,那麼客戶端必然會自動生成一個b,a是authority b是remote
在b中調用
multicast函數,只在本地執行
on server 函數 ,不執行,本地和server都不執行
on client 函數 ,只本地執行
在a中調用
multicast函數,服務器執行,並且同步到每個客戶端,每個客戶端分別執行
on server 函數 ,只服務器執行,不同步客戶端
on client 函數 ,只本地執行
那麼我的疑問來了
--client 的actor調用on server函數,按照我的理解應該會同步到server上,就是說server上的函數應該會被調用啊,但是實際上並沒有。這是爲啥
--難道在actor中真的客戶端就一點都不能調用服務器的函數嗎?那客戶端的按鍵觸摸屏怎麼反饋給服務器呢?難道只有playercontrol中能和服務器通信?
*******************************************************************************************************
動態生成時判斷authority,如果時remote就生成t,三個運行實例 server client: a和b,則server中沒有t,a和b中分別有一個t,但是這兩個t完全獨立沒有任何同步關係,但是他倆都是authority這個有點難以理解。
3、actor中變量a設置爲replicated時,在runtime時,server的actor的a 就能同步到client中。前提是actor也得設置爲replicates
這個也是單向的只能服務器向client同步,client不能向server同步
4、actor中變量a設置爲RepNotify時,會自動創建OnRep_XXX函數,當a變量有變化時自動調用這個函數(client端也是如此)。同時client上的a變量會隨時被server同步。前提是actor也得設置爲replicates
這個也是單向的只能服務器向client同步,client不能向server同步
5、actor中函數b的同步,其實是custom event,function沒有同步選項。前提是actor也得設置爲replicates
multicast 同步到client
在server端運行a actor的multicast 函數,則所有客戶端上的a 都會執行相應的 函數
在client運行a actor的 multicast函數 ,則只在client端執行,同步不到服務器端
run on server 只能運行在server端,不會同步到client
在server端運行,不會同步到客戶端
在client運行,調用也不執行,既不在服務端運行也不在本地運行
run on owning client 只運行在client,就算server端強制調用也不會同步到客戶端
在服務器端運行,則只在服務端的本地actor運行一次
在客戶端運行
-----------------------------------------------------------------------------------------------------------------
未完待續
--------------------------------------------------------------------------------------------------------------
blueprint 版本
createsession joinsession openlevel servertravle