게임 렉 백서 › 동기화 설계
핑에 먹히는 짧은 판정 구간 Timing window too short for latency + reaction
원인 ID sy-short-window · 주 담당 게임개발팀·서버 개발 · 함께 게임개발팀·클라이언트 개발, 인프라팀·서버 인프라
그림과 실험이 있는 원본 카드로 열기 →
회피·패링·가드처럼 반응해야 하는 시간이 짧으면, 핑이 그 시간을 먹어 버려 피할 수 없는 공격이 생깁니다.
왜 보스 공격 예고 0.5초, 패링 판정 0.2초처럼 짧은 판정 구간 → 그러면 예고를 늦게 보고(내려오는 지연 + 보간), 내 입력도 늦게 도착(올라가는 지연 + 틱 대기) → 화면에서는 분명 피했는데 맞음, 패링이 씹힘
- 증상
- 씹힘·롤백, 입력 지연
- 요인
- 지연
- 누가 겪나
- 나만, 특정 기능만
- 언제
- 특정 행동을 할 때
- 담당
- 주 담당 게임개발팀·서버 개발 · 함께 게임개발팀·클라이언트 개발, 인프라팀·서버 인프라
- 게임개발팀 할 일
- 서버: 공격 예고를 서버 시각으로 예약해 미리 보내기, 판정 구간을 핑만큼 늘리기(지연 보상). 클라이언트: 받은 예고를 예약된 서버 시각에 맞춰 재생.
- 인프라팀 할 일
- 유저가 많은 지역 가까이에 서버 배치(지역 서버)해 핑 자체를 줄이기.
- 수치 감각
- 핑 150ms, 보간 100ms면 예고가 내 화면에 뜨기까지 약 0.18초, 내 입력이 서버에 닿기까지 약 0.1초가 듭니다. 사람 반응 0.25초를 더하면 0.5초 예고는 피하기가 거의 불가능합니다.
- 그래프에서는
- 일부만 높음 · 회피·패링 실패율(핑 구간별)
- 확인할 곳
- 서버 로그에 판정 구간의 시작·끝 시각, 유저 입력의 서버 도착 시각, 그 유저의 RTT를 남기고 실패율을 핑 구간(예: 50ms 단위)별로 나눠 봄
- 이러면 맞음
- 핑이 높은 구간일수록 실패율이 뚜렷이 높고 실패한 입력이 판정 구간이 끝나고 조금 뒤(RTT와 보간 시간을 더한 값 이내)에 도착함
- 이러면 아님
- 핑 구간과 상관없이 실패율이 비슷하면 패턴 난이도 문제. 입력이 판정 구간 안에 도착했는데도 실패로 나오면 판정 코드나 서버 검증을 봄
- 확인 수단
- 게임 서버·클라이언트의 로그·지표가 필요
출처
- Factors influencing the latency of simple reaction time (Frontiers in Human Neuroscience, 2015) Frontiers
단순 반응 시간 평균 약 231ms(장비 지연 보정 시 213ms), 최근 대규모 연구들은 233~400ms - Latency and Player Actions in Online Games (Communications of the ACM, 2006) ACM
정밀하고 마감 시간이 짧은 행동일수록 지연에 민감(1인칭 약 100ms, 3인칭 약 500ms, 전지적 시점 약 1,000ms에서 한계) - NetworkTime and ticks (Netcode for GameObjects 2.5) Unity
서버 시각(ServerTime)에 맞춰 이벤트를 예약해 모든 클라이언트가 같은 순간에 재생하는 방법
함께 보면 좋은 원인
같은 층: 동기화 설계
같은 증상(씹힘·롤백)의 다른 층 원인
그림과 실험이 있는 원본 카드 보기