我正在建立一个多人游戏,需要知道游戏中有多少玩家在新加入时分配玩家编号,在某个地方产生他人等等。
这就是gameManager的Inspector的样子:
这些是PunRPC方法,我调用它来获取并设置NetworkPlayerManager类的播放器变量:
public int numPlayer;
[PunRPC]
public void GetPlayers()
{
GetComponent().setNumOfPlayers(numPlayer);
}
[PunRPC]
public void SetPlayers(int num)
{
numPlayer = num;
}
她是我在GameManager课程中实例化新玩家时的称呼方式:
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();
}
我认为我对如何同步变量有一个概念错误。我一直在寻找,但我找不到我做错了什么。
答案 0 :(得分:0)
你总是可以通过PhotonNetwork.playerList.length获得一个房间里的玩家数量。它可能比你正在做的更容易,而且更容易阅读。你可以不断检查人数,每当数字增加时,你都可以做点什么。