using Assets.Scripts.Multiplayer; using Steamworks.ServerList; using System; using System.Collections; using System.Collections.Generic; using System.Linq; using Unity.Netcode; using Unity.Netcode.Transports.UTP; using UnityEngine; using UnityEngine.SceneManagement; using static UnityEditor.Experimental.GraphView.GraphView; public class NetworkedGameSetup : NetworkBehaviour { [SerializeField] private GameObject PlayerPrefab; private void Awake() { if (NetworkManager.Singleton == null || NetworkManager.Singleton.SceneManager == null) return; DontDestroyOnLoad(this); NetworkManager.Singleton.SceneManager.OnLoadEventCompleted += SceneLoaded; } private void SceneLoaded(string sceneName, LoadSceneMode loadSceneMode, List clientsCompleted, List clientsTimedOut) { if (!sceneName.ToLower().Contains("game")) return; NetworkManager.Singleton.SceneManager.OnLoadEventCompleted -= SceneLoaded; // Only run once StartSetupProcedure(clientsCompleted); } private void StartSetupProcedure(List playerIds) { bool isServer = SteamManager.IsServer || LocalManager.IsServer; GameObject[] players; if (isServer) players = SpawnPlayers(playerIds); } private GameObject[] SpawnPlayers(List playerIds) { GameObject[] players = new GameObject[playerIds.Count]; for (int i = 0; i < playerIds.Count; i++) { GameObject player = Instantiate(PlayerPrefab, Vector2.right * i * 2, Quaternion.identity); player.GetComponent().SpawnAsPlayerObject(playerIds[i], true); players[i] = player; } return players; } }