编辑:将更改后的数组仅启用为对象以提高可读性。
目前,我正在使用Photon,并具有一个OnPlayerPropertiesChanged函数,该函数在播放器脚本中调用RPC来更改播放器的模型。他们拥有哪种模型取决于其自定义属性中说明的团队。这两个团队是“公民”和“天使”。我希望在一个人的团队财产为“公民”时显示公民模型,而对于“天使”财产为同样的模型。下面的代码段:
GameManager:
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);
}
}
PlayerController:
[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()时,如何设置代码以使其他客户端的模型在人的屏幕上显示/消失?
我回答了类似问题的其他问题(PUN Changes affect local players only, not other clients),不要将rpc调用到特定目标,而是将rpc目标设置为ALL:
https://doc.photonengine.com/en-us/pun/v2/gameplay/rpcsandraiseevent#targets__buffering_and_order
再见,
吉恩