호스트와 클라이언트 간 화면 싱크에 대해서

문의를 남기실 경우 다음 항목을 작성해 주세요.
정보가 부족한 경우 확인 및 답변이 지연될 수 있습니다.

  • 뒤끝 SDK 버전 : 5.4.5
  • 프로젝트명 : Multiplayer test
  • 스테이터스 코드 :
  • 에러 코드 :
  • 에러 메시지 :

안녕하세요.
현재 매치메이킹을 이용하여 주사위 게임을 만드는 중입니다.

호스트에서 주사위를 던지면 호스트 화면에서 그 주사위가 공중으로 떠서 회전하고 착지하는 모습을
클라이언트 화면에도 동일하게 실시간으로 담고 싶어 호스트 쪽에서 주기적으로
던진 주사위의 위치, 회전 값을 클라이언트로 넘겨서 처리하고 있는데요.

아무리 그 주기를 빠르게 설정해도 클라이언트 화면에서의 주사위 움직임이 호스트 화면만큼
부드럽지가 않더라구요. 주기를 그 이상 빠르게 설정하면 쓰로틀링 한계가 생기구요.

그래서 다른 방법으로 호스트에서 주사위를 던지는 타이밍 때에만
주사위에 가할 힘과 토크 수치만을 클라이언트로 보내어 처리했을 때에는
처음 두어 번은 서로 화면에 주사위 움직임 싱크가 맞다가 어느정도 횟수를 넘어가기 시작하면
화면에 담긴 주사위의 움직임이 서로 틀어지게 되더라구요.

이 문제를 뚜렷하게 해결할 방법이 있을까요?
아니면 이 것이 한계라고 봐야할까요?

안녕하세요 개발자님.

먼저 주사위의 수가 결정되는 방식은 주사위 오브젝트에 물리엔진을 사용하여 물리법칙에 의해 주사위를 굴리는 방식으로 이해를 하면 될까요?

위의 상황으로 이해를 한다면 1번 상황은 위치와 회전값이 틱마다 변경되기 때문에
서버에서 주고받는 속도보다 빨라 싱크가 맞지 않거나 부드럽지 않게 보일 수 있습니다.

제일 좋은 방법은 주사위를 굴렀을 때 결과를 미리 설정하고 그 결과에 맞게 주사위가 돌아가도록 설정하는 것입니다. 주사위가 돌고있는 동안은 물리환경의 차이나 데이터를 받은 시간에 따라 각 클라이언트끼리 미세하게 차이가 있을 수 있겠지만 결과는 모두 같게 나오므로 큰 문제없이 게임이 진행될 것 입니다.

좋아요 1

답변 감사합니다^^

Q. 먼저 주사위의 수가 결정되는 방식은 주사위 오브젝트에 물리엔진을 사용하여 물리법칙에 의해 주사위를 굴리는 방식으로 이해를 하면 될까요?
A. 네 맞습니다.

  1. 결국 실시간 싱크보다는 결과만 싱크를 맞추라는 것으로 이해를 하면 될까요?

  2. 그런데 만들고 있는 게임이 주사위 1개만 던지는 게 아니라 5개를 한번에 던지는데 이럴 때 주사위끼리 물리적으로 서로 부딪히고 하는 그런 연출들까지 싱크를 맞춘다는 건 힘들다고 봐야할까요?

  1. 네 결과만 전송하고 클라이언트에서 자체적으로 행동하는 것을 추천합니다.

  2. 모든 클라이언트의 물리법칙이 완벽히 동일하다면 힘을 작용해도 모든 클라이언트에서 같은 동작이 이루어질 겁니다. 만약 그렇지 않다면 위치등의 싱크를 맞추어도 부자연스럽거나 버그가 발생할 가능성이 높습니다.

동일한 물리법칙과 환경이 아니고 미세한 차이가 있다면 1,3번 주사위가 같은 시간에 부딪히고 2,4번 주사위가 같은 위치에 부딪히는 세세한 디테일은 구현하기 힘들 것 같습니다.

좋아요 1

답변 갑사합니다^^