한국어English日本語简体中文繁體中文DeutschไทยTiếng ViệtРусскийPortuguês (Brasil)EspañolBahasa Indonesia

Libro blanco del lag en juegos › Problemas que solo afectan a algunos

Confusión por reutilización de IDs de entidad Entity ID reused without a generation counter

ID de la causa pt-id-reuse · Responsable principal Desarrollo de servidor (Equipo de desarrollo) · También Desarrollo de cliente (Equipo de desarrollo)

Abrir la ficha interactiva con gráficos y simulaciones →

Si el servidor reutiliza el mismo ID de entidad cuando reaparece un NPC muerto, un cliente que se perdió el mensaje de desaparición en ese intervalo confunde el NPC nuevo con el antiguo.

Por qué Un NPC muere y reaparece con el mismo ID de entidad → Efecto El cliente que se perdió el mensaje de desaparición ignora el mensaje de aparición porque “ya conoce esa entidad”, o la deja en estado de muerta → En pantalla En una sola pantalla el NPC falta o se ve caído en el suelo, y a veces se ve con el aspecto de otro NPC

Síntomas
Entidades invisibles / fantasma
Factores
Pérdida de paquetes
A quién afecta
Solo un cliente en tu PC, Solo yo
Cuándo
De vez en cuando, al azar, Cuando se junta mucha gente
Responsable
Responsable principal Desarrollo de servidor (Equipo de desarrollo) · También Desarrollo de cliente (Equipo de desarrollo)
Tareas (Equipo de desarrollo)
Servidor: añadir un número de generación al ID de entidad para distinguir las reutilizaciones. Cliente: al recibir un mensaje de aparición con un ID conocido, borrar la entidad existente y crearla de nuevo.
En el gráfico
Picos aleatorios · Mensajes de aparición con un ID ya conocido
Dónde mirar
Registrar en el servidor la hora de creación y de borrado de cada ID de entidad (con el número de generación, si existe), y contar las veces que el cliente recibió mensajes de aparición con un ID que ya conocía y los borrados y recreaciones que la actualización de visibilidad trató como “sin cambios”
Se confirma si
El NPC que no se ve o se ve caído tiene el mismo ID que un NPC que acababa de morir, y en ese intervalo ese cliente no recibió el mensaje de desaparición, o el servidor no envió ni el de desaparición ni el de aparición
Se descarta si
Si los ID llevan número de generación y también se usa en las comparaciones, no es esta causa. Si no se ve aunque el ID no sea reutilizado, apunta a la pérdida del mensaje de aparición
Se verifica con
Requiere logs y métricas del servidor o el cliente del juego
Para saber más
También ocurre en el lado del servidor. Si la lista de entidades visibles se compara solo por ID, un NPC que murió y reapareció con el mismo ID entre dos actualizaciones de visibilidad se toma como “sin cambios”, y no se envía ni el mensaje de desaparición ni el de aparición. Si cada jugador actualiza la visibilidad en un momento distinto, solo lo sufren los clientes que coinciden con ese instante.

Fuentes

  1. Entity struct (Entities 1.3) Unity
    Una Entity se compone de un Index y un número de generación (Version), con lo que se distingue si un Index reutilizado sigue siendo válido
  2. NetworkConfig class (Netcode for GameObjects 2.5) Unity
    RecycleNetworkIds y NetworkIdRecycleDelay: los ID de red se reutilizan después de dejarlos libres cierto tiempo

Ver también

Misma capa: Problemas que solo afectan a algunos

Causas de otras capas con el mismo síntoma (Entidades invisibles / fantasma)

Ver la ficha interactiva con gráficos y simulaciones