Photon Unity: Variable doesn't sync using PunRPC
我正在构建一个多人游戏,当一个新加入的人,在某个地方产生他时,我需要知道游戏中有多少个玩家来分配玩家编号。
gameManager的检查器外观如下:
检查器
这些是我调用的PunRPC方法,用于获取和设置NetworkPlayerManager类上的播放器变量:
1 2 3 4 5 6 7 8 9 10 11 12 13 | public int numPlayer; [PunRPC] public void GetPlayers() { GetComponent().setNumOfPlayers(numPlayer); } [PunRPC] public void SetPlayers(int num) { numPlayer = num; } |
在GameManager类上实例化新玩家时,她的名字叫我:
1 2 3 4 5 6 7 8 9 10 | GetComponent().RPC("GetPlayers", PhotonTargets.AllViaServer); m_Tanks.m_Instance = PhotonNetwork.Instantiate("Tank", m_Spawns[numOfPlayers].position, m_Spawns[numOfPlayers].rotation,0) as GameObject; numOfPlayers += 1; m_Tanks.m_PlayerNumber = numOfPlayers; GetComponent().RPC("SetPlayers", PhotonTargets.AllViaServer, numOfPlayers); |
使用此方法,一旦一个玩家进入游戏,该值将保持为1,并且不会更改。就像变量未同步一样,对于每个新实例,它都设置为播放器1。
我也尝试过使用OnPhotonSerializeView进行同步,但是使用以下命令却没有执行任何操作:
1 2 3 4 5 6 7 8 | if (stream.isWriting) { stream.SendNext(numPlayer); } else { numPlayer = (int)stream.ReceiveNext(); } |
我认为我对如何同步变量有一个概念上的错误。我已经搜索并查看了,但是没有发现我在做什么错。
您始终可以通过PhotonNetwork.playerList.length获取房间中的玩家数量。它可能比您正在做的事容易,并且绝对更容易阅读。您可以连续检查人数,并且只要人数增加,您就可以做某事。