using Sirenix.OdinInspector; using System.Collections; using System.Collections.Generic; using Unity.Netcode; using UnityEngine; using Zenject; using ParrelSync; public class GameManager : NetworkBehaviour { [SerializeField] [ReadOnly] [Inject] private PlayerComponent localPlayer; public PlayerComponent LocalPlayer { get { return localPlayer; } } [SerializeField] [ReadOnly] [Inject] private NetworkManager networkManager; private void Start() { networkManager.OnClientConnectedCallback += OnClientConnectedCallback; networkManager.OnClientDisconnectCallback += OnClientDisconnectCallback; if (ClonesManager.IsClone()) { networkManager.StartClient(); } else { networkManager.StartHost(); } } private void OnClientConnectedCallback(ulong clientId) { Debug.Log($"Client-{clientId} is connected and can spawn {nameof(NetworkObject)}s."); if (networkManager.LocalClientId == clientId) { StartCoroutine(SpawnLocalPlayer()); } } private IEnumerator SpawnLocalPlayer() { yield return new WaitForEndOfFrame(); var position = localPlayer.Position; var rotation = localPlayer.Rotation; localPlayer.DestroyWithDependencies(); var playerObject = networkManager.LocalClient.PlayerObject; var player = playerObject.GetComponent(); player.Teleport(position, rotation); localPlayer = player; yield return null; } private void OnClientDisconnectCallback(ulong clientId) { Debug.Log($"Client-{clientId} is disconnected"); } }