我有一个stats脚本定义一个像MaximumHealth这样的玩家,它的名字等等。每个玩家都有一个本地脚本列表。当玩家连接时,我希望他通过RPC完成他的列表
我尝试将photonView.RPC("AskInfos", PhotonTargets.MasterClient, photonView.viewID);
连接到主客户端,以便让他向我发送我需要的信息
[PunRPC]
public void AskInfos(int id)
{
PhotonView pv = PhotonView.Find(id);
string[] toSend = new string[stats.players.Count];
for(int i = 0; i < players.Count; i++)
{
toSend[i] = JsonUtility.ToJson(players[i]);
}
photonView.RPC("ReceiveInfos", pv.owner, toSend, team, id);
}
然后主客户端使用他实际知道的玩家列表在连接玩家上调用ReceiveInfos
[PunRPC]
void ReceiveInfos(string[] plyrs, int teamNumber, int id)
{
List<playerStatsSerializable> playersSentList = new List<playerStatsSerializable>();
for (int i = 0; i < plyrs.Length; i++)
{
playersSentList.Add(JsonUtility.FromJson<playerStatsSerializable>(plyrs[i]));
}
players = playersSentList;
//stats is actually a playerStatsSerializable
stats.teamNumber = teamNumber;
stats.uniqueID = id;
stats.username = PhotonNetwork.player.NickName;
string toSend = JsonUtility.ToJson(stats);
photonView.RPC("AddPlayer", PhotonTargets.All, toSend);
}
然后连接玩家调用AddPlayer将他添加到包括他在内的所有其他玩家的本地列表中(因为playersSentList
不包括他)
[PunRPC]
void AddPlayer(string st)
{
players.Add(JsonUtility.FromJson<playerStatsSerializable>(st));
} //players is the local list containing all the players in the room
一旦我在同一个房间连接两个玩家,每个玩家都只有他的玩家,主人有一个玩家“主人”而客户一个玩家“客户”
我不知道这是否足够清楚我尽力了 如果有人知道在玩家加入时更轻松地同步List,我将不胜感激 提前致谢
编辑:当我将所有rpcs的目标设置为All时,只有客户端拥有正确的List,但主机只有一个玩家“host”。 但只有名称正确的ID才是相同的:///