Photon Unity:使用PunRPC

时间:2017-03-10 12:19:26

标签: unity5 rpc photon

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

这就是gameManager的Inspector的样子:

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();
}

我认为我对如何同步变量有一个概念错误。我一直在寻找,但我找不到我做错了什么。

1 个答案:

答案 0 :(得分:0)

你总是可以通过PhotonNetwork.playerList.length获得一个房间里的玩家数量。它可能比你正在做的更容易,而且更容易阅读。你可以不断检查人数,每当数字增加时,你都可以做点什么。