using PashaBibko.PenguinChase.Extensions; using Unity.Netcode; using UnityEngine; namespace PashaBibko.PenguinChase.Core.Network { public class ConnectionManager : MonoBehaviour { private static ConnectionManager sInstance; [SerializeField] private GameObject PrefabForEachClient; public static GameObject ClientPrefab => sInstance?.PrefabForEachClient; private void Start() { // Stops overlapping instances if (sInstance is not null) { Debug.LogError($"Multiple of [{nameof(ConnectionManager)}] cannot exist."); Destroy(gameObject); return; } sInstance = this; } public static void CreateNetworkConnectionManager() { NetworkManager.Singleton.OnClientConnectedCallback += OnClientJoin; OnClientJoin(0); // Has to be manually called for local client } public static void DestroyNetworkConnectionManager() { NetworkManager.Singleton.OnClientConnectedCallback -= OnClientJoin; sInstance.DestroyAllChildren(); } private static void OnClientJoin(ulong id) { GameObject client = Instantiate(ClientPrefab); NetworkObject networkObject = client.GetComponent(); networkObject.SpawnAsPlayerObject(id); } } }