using System; using System.Collections.Generic; using System.Linq; using Mirror; using UnityEngine; using UnityEngine.SceneManagement; public class CustomNetworkManager : NetworkManager { [Scene] public string menuScene; public NetworkRoomPlayerLobby roomPlayerPrefab; public List RoomPlayers = new List(); public GameObject PlayerInMenu; // public static event Action OnClientConnected; // public static event Action OnClientDisconnected; public override void OnStartServer() { Destroy(PlayerInMenu); spawnPrefabs = Resources.LoadAll("SpawnablePrefabs").ToList(); } // ReSharper disable Unity.PerformanceAnalysis public override void OnStartClient() { Destroy(PlayerInMenu); var spawnablePrefabs = Resources.LoadAll("SpawnablePrefabs"); foreach (var prefab in spawnablePrefabs) { NetworkClient.RegisterPrefab(prefab); } } // ReSharper disable Unity.PerformanceAnalysis public override void OnServerAddPlayer(NetworkConnectionToClient conn) { Debug.Log("OnServerAddPlayer"); if (SceneManager.GetActiveScene().name == "Menu") { NetworkRoomPlayerLobby roomPlayerInstance = Instantiate(roomPlayerPrefab); NetworkServer.AddPlayerForConnection(conn, roomPlayerInstance.gameObject); RoomPlayers.Add( conn.identity.GetComponent()); Debug.Log("Player added"); } } public override void OnServerDisconnect(NetworkConnectionToClient conn) { var networkIdentity = conn.identity; if (networkIdentity != null) { // ReSharper disable once Unity.PerformanceCriticalCodeInvocation var player = networkIdentity.GetComponent(); RoomPlayers.Remove(player); } Debug.Log("disconnected from Server"); base.OnServerDisconnect(conn); } public override void OnServerChangeScene(string newSceneName) { if (newSceneName == "Menu") { Instantiate(PlayerInMenu); } } public override void OnStopServer() { // Instantiate(PlayerInMenu); RoomPlayers.Clear(); } }