Как проверить интернет в единстве без падения 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()