private void Update() { if (newPlayers.Count > 0) { for (int i = 0; i < newPlayers.Count; i++) { NetworkMessage.Player newPlayer = newPlayers.Dequeue(); SpawnPlayers(newPlayer); } } if (disconnectedPlayers.Count > 0) { for (int i = 0; i < disconnectedPlayers.Count; i++) { string diconnectedPlayerID = disconnectedPlayers.Dequeue(); DestroyPlayers(diconnectedPlayerID); } } UpdatePlayers(); }
void UpdatePlayers() { for (int i = 0; i < connectedPlayers.Count; i++) { if (latestUpdates.players.Length <= 0) { return; } if (i >= latestUpdates.players.Length) { return; } NetworkMessage.Player p = latestUpdates.players[i]; if (!connectedPlayers.ContainsKey(p.id)) { continue; } GameObject player = connectedPlayers[p.id]; player.transform.position = p.position; player.transform.rotation = p.rotation; } }
void SpawnPlayers(NetworkMessage.Player player) { if (connectedPlayers.ContainsKey(player.id)) { Debug.Log("Already exists"); return; } //Spawn actual game object GameObject newPlayerGameObject = Instantiate(playerPrefab); //Every players will have different color from the server Color newColor = new Color(player.color.R, player.color.G, player.color.B); newPlayerGameObject.GetComponent <Renderer>().material.SetColor("_Color", newColor); //Add network id NetworkCharacter character = newPlayerGameObject.GetComponent <NetworkCharacter>(); character.SetNetMan(this); character.SetNetworkID(player.id); character.SetControllable(player.id == ownID); connectedPlayers.Add(player.id, newPlayerGameObject); }