簡體   English   中英

Unity Photon - 如何同步玩家統計數據/信息

[英]Unity Photon - How to sync player stats/info

我正在嘗試創建一個合作的第一人稱多人游戲,我想我誤解了 Photon 和 RPC 應該如何工作。 我有一個工作的第一人稱多人游戲項目,其中玩家化身可以看到彼此並隨着玩家化身具有光子視圖光子變換視圖而四處移動。 作為附加到玩家頭像預制件的玩家控制器腳本(僅為本地玩家處理玩家移動)的一部分,我有一個屬性:

public PlayerCharacterInfo myCharacter;

它包含玩家的所有信息和統計信息,包括姓名、等級、當前HP、maxHP 等,當玩家進入房間並實例化他們的頭像時,這些信息和統計信息會添加到玩家頭像的 PlayerController 中。

當我加入多人游戲室時,每個玩家只能看到自己的統計數據。 例如,在運行游戲時的編輯器中,玩家控制器 myCharacter 上僅顯示本地編輯器玩家頭像的值。 我可以看到其他玩家頭像上有一個實例化的 myCharacter,但沒有顯示任何值。 在這一點上,我想我只需要在我的播放器控制器中有一個像這樣的 RPC 函數,它只是將 myCharacter 重新分配給它自己,以便它可以廣播給所有人:

[PunRPC]
void RPC_AddCharacter(PlayerCharacterInfo paramCharacter)
{
    myCharacter = paramCharacter;
}

在無效開始():

if(PV.IsMine)
{
    PV.RPC("RPC_AddCharacter", RpcTarget.All, myCharacter);
}

但這並不能讓我看到非本地玩家頭像的 myCharacter 值。

我的目標是首先通過光線投射顯示您正在查看的玩家頭像的名稱,但我什至無法同步這些數據。

我在這里有正確的想法,但我執行錯了嗎? 或者這不是 Photon 的工作原理? 我是否需要將每個玩家的 PlayerCharacterInfo 存儲在每個玩家的房間控制器中或類似的東西?

您想使用自定義屬性

Photon 的自定義屬性由一個鍵值哈希表組成,您可以按需填寫。 這些值同步並緩存在客戶端上,因此您不必在使用前獲取它們。 SetCustomProperties() 將更改推送給其他人。

這有什么用? 通常,房間和玩家有一些與 GameObject 無關的屬性:當前地圖或玩家角色的顏色(想想:2d 跳躍和奔跑)。 這些可以通過對象同步或 RPC 發送,但使用自定義屬性通常更方便。

解決了一些! 我刪除了試圖同步我的自定義 PlayerCharacterInfo 對象的 RPC 調用,而是在 PlayerController 中進行了調用和新字符串“myCharacterName”,以僅保存玩家的姓名。

新的 RPC 調用采用本地玩家的 myCharacter.characterName(來自 PlayerCharacterInfo)並設置 myCharacterName 並同步到所有。 這有效,我的編輯器播放器可以看到其他玩家的 myCharacterName! 然而,我並沒有更接近同步我的整個 myCharacter 類。

現在我對它的工作原理有了正確的想法,我能夠進行更多研究,發現 Photon 無法正常同步自定義類,但是您可以序列化您的類以便能夠發送它: https://doc .photonengine.com/en-us/realtime/current/reference/serialization-in-photon

然而閱讀這篇讓我意識到我可能不需要同步我的整個玩家數據(它不僅包含健康和狀態,還包含庫存、設備、任務等信息)而且我可能最好只同步單獨的數據在單獨的調用中鍵入。

這個線程也有幫助: https : //forum.photonengine.com/discussion/880/custom-class-object-sent-over-rpc

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM