플레이어 속도 변경을 보낼 때 클라이언트와 서버를 어떻게 동기화합니까?


10

클라이언트 측 예측을 구현하고 있습니다. 대부분의 설명은 클라이언트가 " 플레이어를 1 위치 위로 이동 "과 같은 메시지를 보낸다고 가정합니다 . " 플레이어의 속도를 x로 설정 "과 같은 메시지를 보내면 어떻게 됩니까?

설명 그래픽;  시간이 지남에 따라 클라이언트와 서버에서 보낸 메시지 및 계산 된 위치 표시

클라이언트에서 플레이어는 서버보다 먼저 클라이언트 측 예측에 따라 자체 속도를 설정하여 두 가지가 동기화되지 않습니다. 이 문제는 평균 대기 시간을 고려하더라도 지속됩니다.

이 문제를 어떻게 해결할 수 있습니까?

답변:


8

여분의 데이터를 보내야합니다. 여기서는 위치와 속도를 보냅니다. 동기화되지 않은 경우에도 위치와 속도가 있다는 사실은 보간 기능을 사용하여 궤적을 수정할 수있게합니다.

그런 다음 지연된 애니메이션, 가속 등의 트릭을 사용하면 대기 시간을 숨길 수 있습니다.

편집 : 나는 서버가 권위 있다고 가정합니다.


답변 주셔서 감사합니다. 예, 서버는 권한이 있지만 속도로 중복 데이터를 보내더라도 클라이언트는 오류를 수정할 수 있지만 종종 "클라이언트 / 서버가 엔티티에 공유 코드를 사용하는 경우 예측 오류는 실제로 발생하지 않습니다"와 같은 내용을 읽습니다. 내 경우에는 항상 약간 씩 발생하여 끊김 현상이 발생합니다.
Blu3

1
@ user13842 클라이언트는 항상 동기화되지 않습니다. 서버가 보낸 내용에 따라 Thelvyn이 말한 것처럼 클라이언트 측 위치와 속도를 수정해야합니다. 그렇게하면 클라이언트가 완전히 동기화되지 않는 한 끊김없는 움직임을 얻지 못하면 수정에 너무 많은 시간이 걸리기 때문에 값을 스냅해야합니다.
dreta

이것이 보간 함수를 사용하는 주된 이유입니다. 대기 시간을 피할 수 없으므로 움직임을 부드럽게 수정해야합니다. 클라이언트와 서버는 세계를 시뮬레이션하지만 클라이언트는 서버의 소리를 듣고 수정을 수행해야합니다. 소스 엔진 네트워킹에 사용되는 몇 가지 기술 : developer.valvesoftware.com/wiki/Source_Multiplayer_Networking
Thelvyn

이 Google 토크에서도 간단히 언급
되었으므로

이 특정 문제에 대한 다른 해결책을 찾았습니다. 클라이언트가 각 패킷에 입력을 적용한 시간을 추가합니다. 의미 # 1은 시간 : 0과 두 번째 시간 : 100입니다. 이제 서버는 클라이언트가 이전과는 달리 100 번에 버튼을 눌렀다는 것을 알고 있습니다.
Blu3
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.