using System.Collections; using UnityEngine; using UnityEngine.UI; using TMPro; using DG.Tweening; using Unity.Netcode; using Unity.Multiplayer.Samples.Utilities; public class StartingTimer : NetworkBehaviour { public ServerAdditiveSceneLoader serverAdditiveSceneLoader; private Image BlackScreen; public TextMeshProUGUI TimerText; private NetworkVariable timerValue = new NetworkVariable(0, NetworkVariableReadPermission.Everyone, NetworkVariableWritePermission.Server); private bool coroutineStartedBool = false; private void Start() { BlackScreen = GetComponent(); } private void Update() { if (serverAdditiveSceneLoader.m_SceneState == ServerAdditiveSceneLoader.SceneState.Loaded && coroutineStartedBool == false) { if (IsServer) { coroutineStartedBool = true; StartCoroutine(ServerTimerCoroutine()); } } // Update the UI on all clients UpdateTimerUI(); } private IEnumerator ServerTimerCoroutine() { const int countdownStart = 3; for (int i = countdownStart; i > 0; i--) { timerValue.Value = i; yield return new WaitForSeconds(1); } timerValue.Value = -1; // Indicate "GO" yield return new WaitForSeconds(0.5f); // Notify clients to disable the black screen BlackScreenAlphaDisablerClientRpc(); } private void UpdateTimerUI() { if (timerValue.Value > 0) { TimerText.text = timerValue.Value.ToString(); } else if (timerValue.Value == -1) { TimerText.text = "GO"; } } [ClientRpc] private void BlackScreenAlphaDisablerClientRpc() { BlackScreen.DOFade(0, 0.25f).OnComplete(() => { gameObject.SetActive(false); }); } }