Photon Unity:变量不使用 PunRPC 同步

Photon Unity: Variable doesn't sync using PunRPC

我正在构建一个多人游戏,它需要知道游戏中有多少玩家,以便在有人新加入时分配玩家编号,在某个地方生成他等。

gameManager 的 Inspector 是这样的:

Inspector

我调用这些 PunRPC 方法来获取和设置 NetworkPlayerManager 上玩家的变量 class:

public int numPlayer;

[PunRPC]
public void GetPlayers()
{ 
GetComponent().setNumOfPlayers(numPlayer);
}

[PunRPC]
public void SetPlayers(int num)
{
numPlayer = num; 
}

当新玩家在 GameManager 上实例化时,我就是这样称呼它们的 class:

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 进行同步,但它没有做任何事情:

if (stream.isWriting)
{
stream.SendNext(numPlayer);
}
else
{
numPlayer = (int)stream.ReceiveNext();
}

我认为我对如何同步变量的概念有误。我已经搜索和查看了,但我没有发现我做错了什么。

您随时可以通过PhotonNetwork.playerList.length获取房间内的玩家人数。它可能比您正在做的更容易,而且绝对更容易阅读。可以不断查看人数,每当人数增加,就可以做点什么。