using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Events; using UnityEngine.Networking; public class NetworkManager : MonoBehaviour { [SerializeField] private float responseTimeThreshold = 1.0f; [SerializeField] private string checkUrl = "https://www.google.com"; private float responseTime; private Coroutine checkInternetConnectivityCoroutine; private bool isOnline = false; public bool IsOnline { get { return isOnline; } } public UnityAction OnNetworkOnline; void Awake() { responseTime = 0.0f; checkInternetConnectivityCoroutine = null; isOnline = false; CheckNetwork(); } void Update() { CheckNetwork(); } private void CheckNetwork() { if (Application.internetReachability != NetworkReachability.NotReachable) { if (isOnline == false && checkInternetConnectivityCoroutine == null) { checkInternetConnectivityCoroutine = StartCoroutine(CheckInternetConnectivity()); } } else { if (isOnline) { OnNetworkOnline?.Invoke(false); } isOnline = false; } } IEnumerator CheckInternetConnectivity() { float startTime = Time.time; using (UnityWebRequest www = UnityWebRequest.Get(checkUrl)) { yield return www.SendWebRequest(); responseTime = Time.time - startTime; if (www.result == UnityWebRequest.Result.Success && responseTime < responseTimeThreshold) { isOnline = true; } else { isOnline = false; } checkInternetConnectivityCoroutine = null; OnNetworkOnline?.Invoke(isOnline); } if (Time.time - startTime > responseTimeThreshold) { checkInternetConnectivityCoroutine = null; isOnline = false; OnNetworkOnline?.Invoke(false); yield break; } } }