private void FixedUpdate() { float radius = Mathf.Max(transform.lossyScale.x, transform.lossyScale.y, transform.lossyScale.z); Collider2D[] overlappedCols = Physics2D.OverlapCircleAll(transform.position, radius); List <PlayerRPC> rpcsNotFound = new List <PlayerRPC>(previousFoundRPCs); foreach (Collider2D col in overlappedCols) { PlayerRPC prpc = col.GetComponent <PlayerRPC>(); if (prpc) { if (!rpcsNotFound.Contains(prpc)) { prpc.SetCondition(ConditionToString(Condition)); previousFoundRPCs.Add(prpc); } else { rpcsNotFound.Remove(prpc); } } } while (rpcsNotFound.Count > 0) { rpcsNotFound[0].SetCondition(ConditionToString(PlayerCondition.NONE)); rpcsNotFound.RemoveAt(0); } }
void Update() { if (readyToStart) { MakeGamePlayer(); } if (refreshData) { foreach (TransformVO tv in dataList) { if (tv.socketId != myId) //내가 아니라면 { GameObject p = null; players.TryGetValue(tv.socketId, out p); if (p == null) //해당 유저는 새롭게 접속한 것이니 갱신해서 넣어준다. { p = MakeRemotePlayer(tv); players.Add(tv.socketId, p); } //생성된 애들에 대해서는 데이터를 갱신한다. PlayerRPC remoteRPC = p.GetComponent <PlayerRPC>(); remoteRPC.SetTransform(tv.point, tv.rotation); } } refreshData = false; } }
private GameObject MakeRemotePlayer(TransformVO data) { GameObject remotePlayer = Instantiate(tankPrefab, data.point, Quaternion.identity); remotePlayer.GetComponent <SpriteRenderer>().color = Color.red; PlayerRPC remoteRPC = remotePlayer.GetComponent <PlayerRPC>(); remoteRPC.SetRemote(); remoteRPC.SetTransform(data.point, data.rotation); return(remotePlayer); }
private void assignTeam(Player player) { Layers layer = Layers.Team1Actor; if (this.firstPlayerJoined) { layer = Layers.Team2Actor; } this.firstPlayerJoined = true; player.Team = layer; Debug.Log("Assigned layer: " + layer); PlayerRPC.SetPlayerTeam(player.ID, (int)player.Team); }
private void OnPlayerConnected(NetworkPlayer networkPlayer) { if (!this.firstPlayerJoined) { ObjectRPC.LoadLevel(0); } else { ObjectRPC.LoadLevel(networkPlayer, 0); } Debug.Log("A new player has joined."); Debug.Log("Current number of players: " + base.Players.Count); foreach (Player p in base.Players.Values) { PlayerRPC.NewPlayerJoined(networkPlayer, p.NetworkPlayerInfo, p.ID); } // Generate a viewID for the new player. NetworkViewID viewID = Network.AllocateViewID(); // Notice everyone that the new player has joined. PlayerRPC.NewPlayerJoined(networkPlayer, viewID); Player newPlayer = base.Players[viewID]; // Tell the new player the teams of all the other players. foreach (Player p in base.Players.Values) { if (!(p.ID == base.NetworkControl.LocalViewID || p.ID == newPlayer.ID)) { PlayerRPC.SetPlayerTeam(newPlayer.NetworkPlayerInfo, p.ID, (int)p.Team); } } this.assignTeam(newPlayer); // Sync the existing game world with the new player. this.CurrentLevel.SyncNewPlayer(newPlayer); }