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 只能在房间内使用?

如何通过Photon PUN同步变量

Photon RPC 发送错误的 int 值

Unity3d Photon角色移动不同步

使用Photon引擎进行unity网络游戏开发——Photon常用类介绍

Photon matchmaking - 在 Unity 中使用 SQL 大厅加入或创建房间