Photon Unity:变量不使用 PunRPC 同步
Posted
技术标签:
【中文标题】Photon Unity:变量不使用 PunRPC 同步【英文标题】:Photon Unity: Variable doesn't sync using PunRPC 【发布时间】:2017-03-10 12:19:25 【问题描述】:我正在构建一个多人游戏,它需要知道游戏中有多少玩家,以便在有新人加入时分配玩家编号,在某个地方生成他等等。
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 不变。就像变量不同步一样,对于每一个新的Instance,它都被设置为播放器1。
我也尝试使用 OnPhotonSerializeView 进行同步,但它没有做任何事情:
if (stream.isWriting)
stream.SendNext(numPlayer);
else
numPlayer = (int)stream.ReceiveNext();
我认为我对如何同步变量有一个概念错误。我已经搜索并查看了,但我没有发现我做错了什么。
【问题讨论】:
【参考方案1】:您始终可以通过 PhotonNetwork.playerList.length 获取房间中的玩家数量。它可能比你正在做的更容易,而且绝对更容易阅读。你可以不断的查看人数,每当人数增加时,你就可以做点什么。
【讨论】:
这就是我最后做出来的。谢谢回复^^以上是关于Photon Unity:变量不使用 PunRPC 同步的主要内容,如果未能解决你的问题,请参考以下文章
Unity Photon PUN RPC 只能在房间内使用?