Как проверить интернет в единстве без падения fps

Я работаю в Unity над проектом VR. В этом проекте у нас есть веб-розетки. При возникновении некоторых проблем с Интернетом мы хотим проверить, работает ли веб-сокет или нет, и если это так, мы хотим проверить подключение к Интернету. если Интернет снова подключен, ему необходимо повторно подключиться к веб-сокету или повторно инициализировать его. Мы делаем это сейчас в функции обновления с таймером, который срабатывает каждую секунду, но каждую секунду происходит сброс fps для проверки интернета. Есть ли другой способ обойти это?

public float waitTime = 1f;
private float timer;

private void Update()
{
    timer += Time.deltaTime;
    if (timer > waitTime)
    {
        //check if websocket is alive or that it must re initialized
        if (webSocket != null) //check if websocket was allready initialized 
        {
            if (isSocketError && Application.internetReachability != NetworkReachability.NotReachable) // check if an error was given by the websocket and ethernet is available again
            {
                CreateWebsocketSession(sessionId);
            }
            else if ((!webSocket.IsAlive || !webSocket.IsConnected) && Application.internetReachability != NetworkReachability.NotReachable) // check if websocket is alive and internet is available.
            {
                CreateWebsocketSession(sessionId);
            }
        }


        timer = 0f;
    }
}

1 ответ

Решение

Когда вы вызываете функцию, она завершается, прежде чем вернуться. Это фактически означает, что любое действие, выполняемое в функции, должно происходить в рамках обновления одного кадра.

Я обычно проверяю интернет соединение гуглит (Application.internetReachability не очень хороший способ определить фактическое соединение: docs)

IEnumerator checkInternetConnection(Action<bool> action){
     WWW www = new WWW("http://google.com");
     yield return www;//wait for execution of this row, executed at Time x
     if (www.error != null) {//executed at time x+y, where y is the execution time(i think where you have drops)
         action (false);
     } else {
         action (true);//got internet here
     }
 } 

В вашем случае используйте Coroutine() с урожайностью вместо Update()

Другие вопросы по тегам