using System; using System.Collections; using System.Collections.Generic; using System.Linq; using Unity.Netcode; using UnityEngine; using UnityEngine.SceneManagement; public class NetworkedGameSetup : NetworkBehaviour { [SerializeField] private GameObject PlayerPrefab; private void Start() { DontDestroyOnLoad(this); NetworkManager.Singleton.SceneManager.OnLoadEventCompleted += SceneLoaded; } private void SceneLoaded(string sceneName, LoadSceneMode loadSceneMode, List clientsCompleted, List clientsTimedOut) { NetworkManager.Singleton.SceneManager.OnLoadEventCompleted -= SceneLoaded; // Only run once StartSetupProcedure(clientsCompleted); } private void StartSetupProcedure(List playerIds) { GameObject[] players; if (IsHost || IsServer) players = SpawnPlayers(playerIds); else players = GetPlayers(playerIds); InitRope(players); } private GameObject[] GetPlayers(List playerIds) { GameObject[] players = new GameObject[playerIds.Count]; for (int i = 0; i < playerIds.Count; i++) { ulong playerId = playerIds[i]; players[i] = NetworkManager.SpawnManager.SpawnedObjects[playerId].gameObject; } return players; } private GameObject[] SpawnPlayers(List playerIds) { GameObject[] players = new GameObject[playerIds.Count]; for (int i = 0; i < playerIds.Count; i++) { GameObject player = Instantiate(PlayerPrefab, Vector2.up * 3, Quaternion.identity); player.GetComponent().SpawnAsPlayerObject(playerIds[i], true); players[i] = player; } return players; } private void InitRope(GameObject[] players) { RopeSimulator ropeSim = GetComponentInChildren(); //// Assuming 2 players //ropeSim.start = new RopeJoint(players[0].transform.position, true); //ropeSim.start = players[1]; } }