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