PUN☀️八、拓展网络同步:RPCs 和 Properties
文章目錄
- 🟥 RPCs
- 🟧 Properties
- 1?? 玩家(Player)的自定義屬性
- 🚩 數據同步到網絡
- 🚩 實時獲取方式
- 🚩 回調獲取
- 2?? 房間的自定義屬性
- 🚩 同步到網絡
- 🚩 實時獲取
- 🚩 回調獲取房間自定義屬性
🟥 RPCs
RPCs,即Remote Procedure Call (RPC)
它的作用是:
玩家調用自己的方法。且這個調用,可在所有客戶端等同步。RPCs 和 OnPhotonSerializeView 相比,寫法更簡便。
RPC適合哪些場景呢?
非頻繁更新(玩家的行動),比如改變角色的裝備、使用工具或結束一個回合的游戲,都是不常見的動作(相對于位置,角色狀態這些頻繁更新的屬性來說)。這些動作基于用戶的輸入,用 RPC 發送方便。
效果展示:
使用RPCs同步顯示一個盒子
如何使用呢?
比如,我們想實現,顯示我們自己的寶劍,且在各個客戶端同步。
若按以前我們的思路,可能用 OnPhotonSerializeView ,先寫代碼傳讀寫數據,再掛載到 PhotonView上進行同步。
現在,我們一步便可實現:
1.顯示寶劍的方法 ,用 [PunRPC] 標記。
2.調用該方法: photonView.RPC(“顯示寶劍方法”, RpcTarget.All); 完成。
代碼如下:
🟧 Properties
Properties的作用:
CustomProperties適合非常罕見的更改同步。
比如我們想知道服務器房間中,那個玩家是工程師這個職業。那么我們就可以先給自己設置職業屬性,并同步到服務器,接著,其他人就能從服務器,知道你是什么職業了。
同時,若玩家B只能等玩家A做完他的操作,才能進行下一步。那么,也可以通過這個 Properties,當玩家A完成自己任務,將狀態同步到服務器,玩家B的檢測屬性更改的回調,會判斷A是不是完成了。完成了B就能開始他的操作了。
CustomProperties分為兩種:
- 一種是房間的自定義屬性CustomProperties,
- 一種是玩家(Player)的自定義屬性CustomProperties。
知識點:
值在客戶端上被同步和緩存,因此你不必在使用前獲取它們,現用現取即可。
使用流程:
1.將數據同步到網絡
2.從網絡獲取該值,使用。
1?? 玩家(Player)的自定義屬性
🚩 數據同步到網絡
該值可隨時更新,不存在更新時刻必須在Start等限制。
//要同步的屬性的值public string myJob;void Start(){//將值同步到網絡Hashtable props = new Hashtable() { { "Job", myJob } };PhotonNetwork.LocalPlayer.SetCustomProperties(props);}獲取方式有兩種:
- 一種是實時獲取,需要時獲取。
- 一種是回調。
🚩 實時獲取方式
該值可以隨時獲取,獲取到的都是最新的。
foreach (Player p in PhotonNetwork.PlayerList) {object tarJob;if (p.CustomProperties.TryGetValue("Job", out tarJob)){print((string)tarJob);} }🚩 回調獲取
需繼承 MonoBehaviourPunCallbacks
可使用:
- 玩家自定義屬性回調、
- 房間自定義屬性回調。
//玩家的自定義信息回調
2?? 房間的自定義屬性
跟玩家的自定義屬性使用方法類似,需繼承 MonoBehaviourPunCallbacks。
🚩 同步到網絡
Hashtable setScene = new Hashtable(); setScene["curScn"] = 1;PhotonNetwork.CurrentRoom.SetCustomProperties(setScene);🚩 實時獲取
if(PhotonNetwork.CurrentRoom.CustomProperties.ContainsKey("curScn"))print(PhotonNetwork.CurrentRoom.CustomProperties["curScn"]);🚩 回調獲取房間自定義屬性
public override void OnRoomPropertiesUpdate(Hashtable propertiesThatChanged) {//ContainsKey(你想使用的key)if (propertiesThatChanged.ContainsKey("curScn")){print(propertiesThatChanged["curScn"]);} }
大家還有什么問題,歡迎在下方留言!
如果你有 技術的問題 或 項目開發
都可以加下方聯系方式
和我聊一聊你的故事🧡
總結
以上是生活随笔為你收集整理的PUN☀️八、拓展网络同步:RPCs 和 Properties的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【持续更新】Pun多人在线游戏开发教程
- 下一篇: TCP协议格式和特点