[Unity] [Photon]与连接

时间:2017-09-20 01:17:58

标签: unity3d photon

我有一个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才是相同的:///

0 个答案:

没有答案