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

게임 렉 백서 › 일부에게만 생기는 문제

개체 ID 재사용 혼동 Entity ID reused without a generation counter

원인 ID pt-id-reuse · 주 담당 게임개발팀·서버 개발 · 함께 게임개발팀·클라이언트 개발

그림과 실험이 있는 원본 카드로 열기 →

죽은 NPC가 다시 나타날 때 서버가 같은 개체 ID를 다시 쓰면, 그 사이 퇴장 알림을 놓친 클라이언트는 새 NPC를 옛 NPC로 오인합니다.

왜 NPC가 죽고 같은 개체 ID로 다시 등장 → 그러면 퇴장 알림을 놓친 클라이언트는 “이미 아는 개체”라며 등장 알림을 무시하거나 죽은 상태를 그대로 둠 → 화면에서는 한쪽 화면에만 NPC가 없거나 쓰러진 채로 보임, 다른 NPC의 모습으로 보이기도 함

증상
안 보임·유령 개체
요인
손실
누가 겪나
같은 PC의 한쪽 클라만, 나만
언제
가끔 무작위로, 사람이 몰릴 때
담당
주 담당 게임개발팀·서버 개발 · 함께 게임개발팀·클라이언트 개발
게임개발팀 할 일
서버: 개체 ID에 세대 번호를 붙여 재사용을 구분. 클라이언트: 이미 아는 ID의 등장 알림을 받으면 기존 개체를 지우고 새로 만들기.
그래프에서는
가끔 무작위로 튐 · 이미 아는 ID의 등장 알림 수
확인할 곳
서버에 개체 ID별 생성·삭제 시각(세대 번호가 있으면 함께)을 남기고 클라이언트가 이미 아는 ID로 등장 알림을 받은 횟수와 시야 갱신 때 “변화 없음”으로 처리된 삭제·재생성을 셈
이러면 맞음
안 보이거나 쓰러진 채 보이는 NPC의 ID가 직전에 죽은 NPC와 같고 그 사이 그 클라이언트가 퇴장 알림을 받지 못했거나 서버가 퇴장·등장 알림을 둘 다 보내지 않음
이러면 아님
ID에 세대 번호가 있고 비교에도 쓰고 있으면 이 원인이 아님. 재사용된 ID가 아닌데도 안 보이면 등장 알림 유실 쪽
확인 수단
게임 서버·클라이언트의 로그·지표가 필요
더 알아보기
서버 쪽에서도 생깁니다. 시야 안 개체 목록을 ID로만 비교하면, 두 번의 시야 갱신 사이에 죽고 같은 ID로 다시 스폰된 NPC를 “변화 없음”으로 보고 퇴장·등장 알림을 둘 다 보내지 않습니다. 시야 갱신 시점이 사람마다 어긋나 있으면 그 순간에 걸린 클라이언트만 겪습니다.

출처

  1. Entity struct (Entities 1.3) Unity
    Entity는 Index와 세대 번호(Version)로 이뤄져, 재사용된 Index가 아직 유효한지 구분
  2. NetworkConfig class (Netcode for GameObjects 2.5) Unity
    RecycleNetworkIds·NetworkIdRecycleDelay: 네트워크 ID를 일정 시간 비운 뒤 재사용

함께 보면 좋은 원인

같은 층: 일부에게만 생기는 문제

같은 증상(안 보임·유령 개체)의 다른 층 원인

그림과 실험이 있는 원본 카드 보기