Cuando la ventana del cliente está en segundo plano, el juego, el motor y el SO reducen sus frames y su procesamiento. Los paquetes recibidos no se procesan a tiempo y se acumulan o desbordan.
Por qué Límite de frames en segundo plano de las opciones del juego o del driver gráfico (p. ej., el driver de NVIDIA permite elegir entre 20 y 200 por segundo), ahorro de energía, ajuste del motor que detiene el juego en segundo plano. El SO también da prioridad de CPU y GPU a la ventana en primer plano → Efecto Se procesan menos paquetes por frame, la cola crece y, si el búfer de recepción se desborda, se descartan → En pantalla Al traer la ventana al frente todo aparece de golpe, o algunos NPC no llegan a verse nunca
Responsable principal Desarrollo de cliente (Equipo de desarrollo) · También Externo (Externo)
Tareas (Equipo de desarrollo)
Seguir recibiendo de la red en un hilo separado del bucle del juego, garantizar un procesamiento mínimo también en segundo plano, activar el ajuste de ejecución en segundo plano del motor (runInBackground en Unity).
Tareas (Externo)
Indicar a los jugadores que desactiven el límite de frames en segundo plano del driver gráfico y el modo de ahorro de energía de su PC.
Cifras de referencia
En Unity, si runInBackground está desactivado, el bucle del juego se detiene en el instante en que la ventana pierde el foco. Si la recepción solo se hace en ese bucle, mientras tanto no se procesa ningún paquete.
En el gráfico
Hueco y luego ráfaga · Intervalo entre frames del cliente, paquetes procesados por frame
Dónde mirar
En la misma computadora, poner una ventana delante y la otra detrás, intercambiar los papeles y comparar. Medir con PresentMon el intervalo entre frames de los dos procesos y, si hay logs del juego, ver el estado de foco de la ventana y los paquetes procesados en cada frame
Se confirma si
Solo con la ventana en segundo plano el intervalo entre frames crece mucho (si es el límite del driver, se queda plano en el intervalo que corresponde a los frames configurados) o el procesamiento se detiene, y al intercambiar las ventanas el problema pasa al otro cliente
Se descarta si
Si también ocurre en la ventana en primer plano, no es por el límite en segundo plano. Si siempre falla el mismo cliente, esté donde esté su ventana, apunta a “Opciones de visualización distintas” o a una diferencia de versión
Se verifica con
En el entorno del jugador
Fuentes
Application.runInBackgroundUnity El valor predeterminado de runInBackground es false, y en ese caso la aplicación se pausa en segundo plano