호스트와 클라이언트간 물리작용 동기화

  • 뒤끝 SDK 버전 : 5.14.1
  • 프로젝트명 : MagnetGame

안녕하세요 저는 현재 쉽게 말씀드리면 턴제 자석게임을 제작하고 있습니다.
플레이어 2명이서 1번씩 돌아가며 바둑판 위에 돌을 착수하고 주변에 돌이 있는지 판단해 끌어당기는 게임입니다.

질문:

  1. 현재 돌을 착수하는 입력까진 동기화가 잘 되지만 이 이후에 주변에 돌을 끌어당기는 물리작용에서 제대로 동기화가 안됩니다. 보통 돌을 착수하는 쪽에서만 물리 작용이 일어나고 받는 쪽에선 동기화가 잘 안되는 경우가 많았습니다.
public void SendStoneSyncMessge()
    {
        // 상태 동기화 메시지 전송
        List<string> attachedIds = new List<string>();
        foreach (var connectobj in CountConnectedObjects())
        {
            Stone attachedStone = connectobj.GetComponent<Stone>();
            if (attachedStone != null)
            {
                attachedIds.Add(attachedStone.stoneId);
            }
        }

        StoneSyncMessage msg = new StoneSyncMessage(
            stoneId,
            transform.position,
            transform.rotation,
            rb.velocity,
            rb.angularVelocity,
            attachedIds
        );
        BackendMatchManager.Instance.SendDataToInGame(msg);
    }

돌의 위치가 변경되거나 착수 시 위의 함수를 호출해 주고 있는데 다른 방법이 있을까요?

  1. 물리작용되는 부분만 브로드캐스팅방식이 아닌 p2p 같은 방법이 있을까요?

안녕하세요, 개발자님.
문의하신 내용은 확인 후 안내드리겠습니다.

기다려주셔서 감사합니다.
문의하신 내용 순차적으로 답변드립니다.

  1. 뒤끝매치의 서버는 메시지를 중개하는 릴레이 서버로써의 기능을 수행하며, 게임 로직에는 관여하지 않습니다.
    문의 하신 내용에서 뒤끝매치 서버가 상대 클라이언트에게 정상적으로 메시지를 전달했다면, 개발자님이 동기화 처리를 해주셔야 합니다.
    동기화 문제 관련하여 아래 사항을 참고해 주시면 감사하겠습니다.

    • 상태값을 전달하여 강제 상태 동기화 대신 액션(돌착수)을 전달하여 다른 유저도 각각 액션(돌착수)을 실행해 상태를 동기화.
    • 각각 실행하는 클라이언트의 실행 프레임 차이에 따라 결과가 달라지지 않도록 로직 구성.
  2. 뒤끝매치는 p2p 기능을 제공하고 있지 않습니다.

감사합니다.