Как проверить интернет-соединение в единстве без падения fps - PullRequest
0 голосов
/ 24 сентября 2018

Я работаю в 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 Ответ

0 голосов
/ 24 сентября 2018

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

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

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()

...