public void SendStatsToNewPlayer(PhotonPlayer NewPlayer)//посылаем статы всех новому игроку при подключении { SyncDate date = new SyncDate(); players = GameObject.FindGameObjectsWithTag("Player"); date.ID = new int[players.Length]; date.Deads = new int[players.Length]; date.Kills = new int[players.Length]; date.KillsSeries = new int[players.Length]; date.myKillerId = new int[players.Length]; date.GameTime = TimeGame; date.FB = FB; date.ItemCoin = new bool[COINS.transform.childCount]; date.ItemHP = new bool[HILLS.transform.childCount]; date.ItemJump = new bool[JUMPS.transform.childCount]; date.ItemSpeed = new bool[SPEEDS.transform.childCount]; for (int i = 0; i < players.Length; i++)//статы персов на сцене { date.ID[i] = players[i].GetComponent <PhotonView>().viewID; date.Deads[i] = players[i].GetComponent <NETPIG>().Deads; date.Kills[i] = players[i].GetComponent <NETPIG>().Kills; date.KillsSeries[i] = players[i].GetComponent <NETPIG>().KillsSeries; if (players[i].GetComponent <NETPIG>().MyKiller != null)//если убийца есть { date.myKillerId[i] = players[i].GetComponent <NETPIG>().MyKiller.GetComponent <PhotonView>().viewID; } else//если нет { date.myKillerId[i] = 0; } } for (int i = 0; i < date.ItemCoin.Length; i++)//монетки на сцене { date.ItemCoin[i] = COINS.transform.GetChild(i).GetComponent <BoxCollider>().enabled; } for (int i = 0; i < date.ItemHP.Length; i++)//яблочки { date.ItemHP[i] = HILLS.transform.GetChild(i).GetComponent <BoxCollider>().enabled; } for (int i = 0; i < date.ItemSpeed.Length; i++)//морковки { date.ItemSpeed[i] = SPEEDS.transform.GetChild(i).GetComponent <BoxCollider>().enabled; } for (int i = 0; i < date.ItemJump.Length; i++)//помидорки { date.ItemJump[i] = JUMPS.transform.GetChild(i).GetComponent <BoxCollider>().enabled; } RaiseEventOptions options = new RaiseEventOptions { TargetActors = new[] { NewPlayer.ID } }; PhotonNetwork.RaiseEvent(100, date, true, options); }
public static SyncDate Deserialize(byte[] bytes) { MemoryStream memStream = new MemoryStream(); BinaryFormatter binForm = new BinaryFormatter(); memStream.Write(bytes, 0, bytes.Length); memStream.Seek(0, SeekOrigin.Begin); SyncDate obj = (SyncDate)binForm.Deserialize(memStream); return(obj); }
public void ReciveStatsToNewPlayer(SyncDate date) //прием данных при подключении { TimeGame = date.GameTime; //синхронизация времени FB = date.FB; //синхронизация события FB for (int i = 0; i < date.ID.Length; i++) { if (PhotonView.Find(date.ID[i]).gameObject != null) //проверяем что игрок все еще на сцене { GameObject currentPlayer = PhotonView.Find(date.ID[i]).gameObject; //ищем игрока по ID currentPlayer.GetComponent <NETPIG>().Deads = date.Deads[i]; currentPlayer.GetComponent <NETPIG>().Kills = date.Kills[i]; currentPlayer.GetComponent <NETPIG>().KillsSeries = date.KillsSeries[i]; if (date.myKillerId[i] != 0) { currentPlayer.GetComponent <NETPIG>().MyKiller = PhotonView.Find(date.myKillerId[i]).gameObject; } else { currentPlayer.GetComponent <NETPIG>().MyKiller = null; } } } for (int i = 0; i < date.ItemCoin.Length; i++)//монетки на сцене { COINS.transform.GetChild(i).GetChild(0).gameObject.SetActive(date.ItemCoin[i]); COINS.transform.GetChild(i).GetComponent <BoxCollider>().enabled = date.ItemCoin[i]; } for (int i = 0; i < date.ItemHP.Length; i++)//яблочки { HILLS.transform.GetChild(i).GetChild(0).gameObject.SetActive(date.ItemHP[i]); HILLS.transform.GetChild(i).GetComponent <BoxCollider>().enabled = date.ItemHP[i]; } for (int i = 0; i < date.ItemSpeed.Length; i++)//морковки { SPEEDS.transform.GetChild(i).GetChild(0).gameObject.SetActive(date.ItemSpeed[i]); SPEEDS.transform.GetChild(i).GetComponent <BoxCollider>().enabled = date.ItemSpeed[i]; } for (int i = 0; i < date.ItemJump.Length; i++)//помидорки { JUMPS.transform.GetChild(i).GetChild(0).gameObject.SetActive(date.ItemJump[i]); JUMPS.transform.GetChild(i).GetComponent <BoxCollider>().enabled = date.ItemJump[i]; } }
private void OnEvent(byte eventcode, object content, int senderid) { switch (eventcode) { case 100: //событие передачи данных при подключении к ранее созданной игре { SyncDate Date = (SyncDate)content; ReciveStatsToNewPlayer(Date); break; } case 99: //запрос мастер клиенту на передачу данных { if (PhotonNetwork.isMasterClient) { SendStatsToNewPlayer(PhotonPlayer.Find(senderid)); } break; } } }