【发布时间】:2017-03-10 12:19:25
【问题描述】:
我正在构建一个多人游戏,它需要知道游戏中有多少玩家,以便在有新人加入时分配玩家编号,在某个地方生成他等等。
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 不变。就像变量不同步一样,对于每一个新的Instance,它都被设置为播放器1。
我也尝试使用 OnPhotonSerializeView 进行同步,但它没有做任何事情:
if (stream.isWriting)
{
stream.SendNext(numPlayer);
}
else
{
numPlayer = (int)stream.ReceiveNext();
}
我认为我对如何同步变量有一个概念错误。我已经搜索并查看了,但我没有发现我做错了什么。
【问题讨论】: