Star Control과 유사한 melee 을 지원하는 게임 서버를 구현하고 있습니다. 따라서 이동 속도를 높이기위한 초간단 속도 / 가속 / 물리 물리학을 사용하여 선박을 비행하고 사격 할 수 있습니다.
Valve, Gafferon 및 Gambetta를 읽고 클라이언트 예측을 위해 Gambetta의 알고리즘 을 구현했습니다 .
클라이언트 예측은 서버가 도착할 때 서버에서 위치를 업데이트 한 다음 아직 서버별로 처리되지 않은 입력을 플레이어 우주선에 다시 적용하여 플레이어 우주선에서 작동합니다.
불행히도 내 게임에서는 잘 작동하지 않습니다. 나는 Gambetta의 예제가 이미 움직이는 객체 또는 단계별로 업데이트되는 명령을 고려하지 않는다는 사실과 관련이 있다고 생각합니다. ( "단계"에 의해 나는 프레임을 의미한다). 따라서 내 게임에서 플레이어는 클라이언트에서 계속 움직이고 (이미 이동하는) 함선을 가속화하기 위해 압력을가합니다. 명령을 서버로 보내고 일반적으로 다음 단계에서 서버에서 월드 스냅 샷을받습니다. 나는 다음과 같은 것을 얻는다 :
player 명령은 클라이언트 3 단계 에서 실행 되지만 서버에서는 5 단계 에서만 실행됩니다 . 클라이언트 단계 6 에서 월드 스냅 샷이 클라이언트에 의해 수신 될 때 , 특히 더 빠른 속도로 예측이 중단된다.
문제의 핵심은 클라이언트가 5 단계 실행하지만 서버가 6 단계 실행한다는 것 입니다. 명령으로 클라이언트 단계를 보내는 것에 대해 생각하고 서버가 클라이언트 시간 단계로 롤백하고 명령을 다시 실행하도록했습니다. 롤백 이후에 수신 된 명령에서 발생하는 것과 같은 조치 나 전송 된 단계를 변경하여 부정 행위 클라이언트가 악용 할 수있는 방법과 같은 많은 다른 문제점이 발생할 수 있습니다.
읽기와 같은 비디오를보고 이것 구글에서하면 점차적으로 몇 단계에 걸쳐 스냅 샷과 동일하게 플레이어의 위치를 변경 다른 접근 방식을 언급하고있다.
내 질문 :
Gambetta의 알고리즘을 일정한 단계 이동으로 작동시킬 수 있습니까? 아니면 내 게임과 개념적으로 호환되지 않습니까?
단계에 대한 점진적 보간이 올바른 방법이됩니까? 그렇다면 서버에서받은 것과 일치하도록 클라이언트 위치에서 이미 움직이는 객체를 어떻게 보간합니까?
이러한 방법, 점진적 보간 및 Gambetta의 알고리즘이 함께 작동 할 수 있습니까? 아니면 상호 배타적입니까?