PUN 更改仅影响本地玩家,不影响其他客户端
PUN Changes affect local players only, not other clients
我一直对其他客户在玩家游戏中的行为有一些疑问。基本上,如果有影响每个客户的变化,它就会起作用。但是,它只会正确显示在本地播放器的屏幕上。其他玩家(如他们在客户端屏幕上显示的那样)保持不变。
例如,假设我将一个名为 "test" 的布尔值设置为 false。房间里的每个玩家同时都要将这个布尔值变为真。每个玩家自己的角色 "test" 设置为 true,但本地玩家屏幕上的其他客户端将他们的布尔值显示为 false。
我如何检查以下每个玩家的示例:
foreach (var item in PhotonNetwork.PlayerList)
{
var itemPhotonView = (PhotonView)item.TagObject;
itemPhotonView.RPC("SetPlayerTeam", item, citiString);
}
我希望上面的代码遍历每个角色,即使不是本地玩家。我相信它能做到,但我不是 100% 确定。
public override void OnPlayerPropertiesUpdate(Player target, ExitGames.Client.Photon.Hashtable changedProps)
{
if (changedProps.ContainsKey("team"))
{
var targetPhotonView = (PhotonView)target.TagObject;
targetPhotonView.RPC("ChangeTeamObjs", target, changedProps);
}
}
我确定上面的代码不会更改非本地客户端。我不确定我是否应该像第一个示例那样使用 'foreach' 方法,因为我什至不确定这是否会完成它。有什么想法吗?
向所有人发送rpc可以更有效地完成,通过将rpc的目标定义为每个人,这将防止网络流量过载,并且只发送一个rpc。
https://doc.photonengine.com/en-us/pun/v2/gameplay/rpcsandraiseevent#targets__buffering_and_order
PhotonView photonView = PhotonView.Get(this);
photonView.RPC("ChangeTeamObjs", RpcTarget.All, , item, citiString);
我一直对其他客户在玩家游戏中的行为有一些疑问。基本上,如果有影响每个客户的变化,它就会起作用。但是,它只会正确显示在本地播放器的屏幕上。其他玩家(如他们在客户端屏幕上显示的那样)保持不变。
例如,假设我将一个名为 "test" 的布尔值设置为 false。房间里的每个玩家同时都要将这个布尔值变为真。每个玩家自己的角色 "test" 设置为 true,但本地玩家屏幕上的其他客户端将他们的布尔值显示为 false。
我如何检查以下每个玩家的示例:
foreach (var item in PhotonNetwork.PlayerList)
{
var itemPhotonView = (PhotonView)item.TagObject;
itemPhotonView.RPC("SetPlayerTeam", item, citiString);
}
我希望上面的代码遍历每个角色,即使不是本地玩家。我相信它能做到,但我不是 100% 确定。
public override void OnPlayerPropertiesUpdate(Player target, ExitGames.Client.Photon.Hashtable changedProps)
{
if (changedProps.ContainsKey("team"))
{
var targetPhotonView = (PhotonView)target.TagObject;
targetPhotonView.RPC("ChangeTeamObjs", target, changedProps);
}
}
我确定上面的代码不会更改非本地客户端。我不确定我是否应该像第一个示例那样使用 'foreach' 方法,因为我什至不确定这是否会完成它。有什么想法吗?
向所有人发送rpc可以更有效地完成,通过将rpc的目标定义为每个人,这将防止网络流量过载,并且只发送一个rpc。
https://doc.photonengine.com/en-us/pun/v2/gameplay/rpcsandraiseevent#targets__buffering_and_order
PhotonView photonView = PhotonView.Get(this);
photonView.RPC("ChangeTeamObjs", RpcTarget.All, , item, citiString);