게임 렉 백서 › L1 클라이언트 게임 프로세스
클라이언트 예측 불일치 Prediction mismatch / reconciliation
원인 ID cg-predict · 주 담당 게임개발팀·클라이언트 개발 · 함께 게임개발팀·서버 개발
그림과 실험이 있는 원본 카드로 열기 →
내 클라이언트가 먼저 움직여 보여 줬는데 서버가 다르게 계산하면 내 캐릭터가 끌려갑니다.
왜 클라이언트가 서버 확인 전에 먼저 움직임(예측) → 그러면 서버는 충돌·이동 속도·버프를 다르게 계산하거나 명령을 못 받음 → 화면에서는 확인이 올 때 내 캐릭터가 뒤로 끌려감
- 증상
- 고무줄
- 요인
- 손실, 지연
- 누가 겪나
- 나만
- 언제
- 이동 중·지역 전환 때, 가끔 무작위로
- 담당
- 주 담당 게임개발팀·클라이언트 개발 · 함께 게임개발팀·서버 개발
- 게임개발팀 할 일
- 클라이언트: 서버와 같은 이동 코드 사용, 입력 중복 전송, 보정은 부드럽게. 서버: 클라이언트와 같은 이동 코드 사용, 중복으로 온 입력은 입력 번호로 걸러 한 번만 처리.
- 수치 감각
- 끌려가는 거리는 “어긋난 시간 × 이동 속도”. 명령 몇 개만 사라져도 1~3m.
- 그래프에서는
- 가끔 무작위로 튐 · 서버 보정(예측 실패) 횟수
- 확인할 곳
- 서버가 보낸 위치 보정 횟수와 보정 거리를 기록. 언리얼은 서버의 ClientAdjustPosition 보정, 유니티 Netcode for Entities는 예측 실패로 되돌려 다시 계산한 횟수를 셈
- 이러면 맞음
- 고무줄 제보 시각에 보정이 몰리고 특정 버프·지형·이동기에서 보정 거리가 반복해서 큼
- 이러면 아님
- 보정이 손실이 큰 때에만 몰리면 입력 패킷 손실(회선) 쪽. 보정 없이 다른 캐릭터만 끌려가 보이면 “과도한 외삽(데드 레커닝)”
- 확인 수단
- 게임 서버·클라이언트의 로그·지표가 필요
출처
- Introduction to prediction (Netcode for Entities 6.5) Unity
클라이언트와 서버가 같은 시뮬레이션 코드로 예측, 서버 상태와 다르면(예측 실패) 되돌려 다시 계산하며 보정이 보임 - Use the command stream to handle user inputs (Netcode for Entities 6.5) Unity
패킷 손실에 대비해 최신 입력과 함께 이전 몇 틱의 입력을 중복으로 보냄 - Understanding Networked Movement in the Character Movement Component for Unreal Engine Epic Games
클라이언트가 먼저 움직이고 서버가 같은 이동을 재현, 위치가 다르면 ClientAdjustPosition으로 보정하고 저장한 이동을 다시 적용
함께 보면 좋은 원인
같은 층: L1 클라이언트 게임 프로세스
같은 증상(고무줄)의 다른 층 원인
그림과 실험이 있는 원본 카드 보기