게임 렉 백서 › 일부에게만 생기는 문제
몬스터 제어 권한이 느린 클라이언트에 있음 Monster movement delegated to a player client
원인 ID pt-mob-control · 주 담당 게임개발팀·서버 개발
그림과 실험이 있는 원본 카드로 열기 →
서버 부하를 줄이려고 몬스터 이동 계산을 근처 플레이어 한 명의 클라이언트에 맡기는 게임이 있습니다. 그 사람 회선이 나쁘면 그 몬스터가 모두의 화면에서 이상하게 움직입니다.
왜 서버가 몬스터 이동 계산을 가장 가까운(또는 먼저 온) 플레이어의 클라이언트에 맡김 → 그러면 맡은 사람의 결과 보고가 늦거나 몰려서 서버에 도착 → 화면에서는 그 몬스터만 주변 모두의 화면에서 멈칫하다 순간이동. 맡은 사람 본인 화면에서는 멀쩡
- 증상
- 순간이동, 뚝뚝 끊김, 몰아치기
- 요인
- 지터, 손실
- 누가 겪나
- 특정 캐릭터만 이상해 보임, 특정 장소·채널
- 언제
- 항상, 가끔 무작위로
- 담당
- 주 담당 게임개발팀·서버 개발
- 게임개발팀 할 일
- 제어 권한을 회선이 좋은 사람에게 넘기기(핑·손실 기준), 보고가 끊기면 서버가 즉시 회수, 보스처럼 중요한 몬스터는 서버가 직접 계산.
- 그래프에서는
- 일부만 높음 · 몬스터별 위치 보고 간격(제어 권한을 가진 클라이언트별)
- 확인할 곳
- 서버에 몬스터마다 제어 권한을 가진 클라이언트와 그 클라이언트의 보고 간격, RTT, 손실을 남김. 서버 쪽 패킷 캡처에서 그 클라이언트가 보낸 패킷의 도착 간격도 볼 수 있음
- 이러면 맞음
- 이상하게 움직이는 몬스터의 제어 권한이 모두 같은 한 사람에게 있고 그 사람의 보고 간격이 들쭉날쭉하거나 끊기며 권한을 다른 사람에게 넘기면 바로 정상
- 이러면 아님
- 서버가 직접 계산하는 몬스터도 똑같이 튀면 서버 틱 지연이나 보는 사람 쪽 회선. 권한을 옮겨도 계속 튀면 명령 동기화의 경로 계산 불일치
- 확인 수단
- 게임 서버·클라이언트의 로그·지표가 필요
- 더 알아보기
- 맡은 사람은 멀쩡하다고 느끼므로 제보는 “몬스터가 이상하다”로만 들어옵니다. 한 사람만 빼고 모두가 같은 몬스터를 이상하게 본다면, 그 몬스터의 제어 권한을 누가 가졌는지부터 확인합니다.
출처
- Authority (Netcode for GameObjects 2.5) Unity
분산 권한 모델에서는 게임 인스턴스(클라이언트)마다 일부 네트워크 개체의 권한을 맡아 그 개체를 계산 - Distributed authority topologies (Netcode for GameObjects 2.5) Unity
권한이 클라이언트에 나뉘면 단일 시뮬레이션이 없고 치팅에 취약
함께 보면 좋은 원인
같은 층: 일부에게만 생기는 문제
같은 증상(순간이동)의 다른 층 원인
그림과 실험이 있는 원본 카드 보기