关于unity5:Photon Unity:变量不使用PunRPC同步

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获取房间中的玩家数量。它可能比您正在做的事容易,并且绝对更容易阅读。您可以连续检查人数,并且只要人数增加,您就可以做某事。