PUN OnPlayerPropertiesChanged 和对象启用

PUN OnPlayerPropertiesChanged and Object Enabling

编辑:将要启用的数组更改为对象以提高可读性。

目前我正在使用 Photon 并有一个 OnPlayerPropertiesChanged 函数调用播放器脚本中的 RPC 来更改播放器的模型。他们拥有什么模型取决于他们的自定义属性中声明的团队。两队分别是"citizens"和"angels"。我希望公民模型在一个人的团队 属性 是 "citizen" 时出现,对于 属性 或 "angel" 也是如此。下面的代码片段:

游戏经理:

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

播放器控制器:

[PunRPC]
        public void ChangeTeamObjs(PhotonHash changedProps)
        {
            switch (changedProps["team"].ToString())
            {
                    case specString:
                        citizenModel.SetActive(true);
                        angelModel.SetActive(false);
                        break;
                    case citiString:
                        citizenModel.SetActive(true);
                        angelModel.SetActive(false);
                        break;
                    case angelString:
                        citizenModel.SetActive(false);
                        angelModel.SetActive(true);
                        break;
                    default:
                        Debug.Log("ChangeTeamObjs() | Unknown team! | " + PhotonNetwork.LocalPlayer.NickName);
                        break;
            }
            ClientServerEnabling();
        }

目前,每个人的模型在他们自己的屏幕上都可以正确更改,但其他玩家的两个模型在本地玩家的屏幕上都可以启用。当调用 OnPlayerPropertiesUpdate() 时,如何设置我的代码以在一个人的屏幕上显示其他客户的模型 appear/disappear?

我回答了你的其他问题 () 有类似的问题,不要调用 rpc 到特定目标,而是将你的 rpc 目标设置为 ALL:

https://doc.photonengine.com/en-us/pun/v2/gameplay/rpcsandraiseevent#targets__buffering_and_order