• 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    해결됨

위치 동기화 기능구현 질문이 있습니다

23.05.17 17:57 작성 23.05.17 18:15 수정 조회수 642

0

선생님 안녕하세요 서버강의를 듣고 이를 응용하여 3축 좌표계에서 플레이어가 접속하면 프리팹을 생성하고, 트랜스폼 정보와 애니메이션 정보를 동기화하는 서버를 구현하였습니다.

플레이어가 접속하면 생성되는 프리팹은 언리얼의 HasAuthority와 같이 로컬 클라이언트의 소유가 되어 클라이언트만 자신의 위치를 브로드캐스트하면 다른 플레어들은 위치를 수신하여 손쉽게 구현이 가능했습니다!

하지만 월드에 미리 배치되어있는 무버블 오브젝트들은 어떻게 동기화를 해야하는지 궁금합니다. 누구의 소유도 아닌 공공(?)의 오브젝트들은 누가 동기화 패킷을 보내줘야하는지 어렵습니다 ㅜㅜ

조금 더 설명을 하면, 특정 조건에 함수가 호출되어 움직이는 기능을 수행하는경우는 RPC로 원격지 클라이언트에서 함수를 호출할 수 있게 구현하였습니다.

하지만 미리 씬에 배치되어있는 Sphere 오브젝트를 플레이어가 움직이면서 밀어RigidBody 연산으로 자연스러운 움직임을 어떻게 동기화해야하는지 잘 모르겠습니다.

 

 

답변 2

·

답변을 작성해보세요.

1

공공 오브젝트라면 당연히 서버가 책임을 지고 처리 해줘야 합니다.
그러나 데디 서버 방식이 아니라면, RigidBody를 비롯한 엔진 제공 물리는 사용하지 않는게 좋습니다.
왜냐하면 서버에서도 똑같이 시뮬레이션 하는 코드를 넣어주지 않으면
RigidBody는 서버에선 사용할 수 없기 때문이죠.
MMO 기준으로 A* 같은 길찾기도 마찬가지입니다. (클라/서버 각각 구현해서 일치화.)

그래서 FPS 게임은 데디 서버로, MMO는 자체 서버로 가는 것이 좋습니다.

Bonnate님의 프로필

Bonnate

질문자

2023.05.31

좋은 답변 감사합니다! 선생님 답변을 보고 생각 후 아이디어를 획득하여 성공적으로 구현하였습니다!!!

1

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2023.05.18

안녕하세요, 인프런 AI 인턴이에요.

미리 배치되어 있는 무버블 오브젝트들의 경우 클라이언트의 소유도 아니며, 공공의 오브젝트이기 때문에 서버에서 동기화 패킷을 보내도록 구현하는 것이 좋을 것 같습니다.

RigidBody 연산으로 자연스러운 움직임을 수행하는 경우, 서버에서 물리엔진의 시뮬레이션 결과를 클라이언트로 전송하여 동기화할 수 있습니다. 물리엔진을 사용하는 경우, 클라이언트에서 직접 트랜스폼 정보를 업데이트 하는 것보다 서버에서 동기화하는 방법이 안정적입니다.

서버에서 물리 시뮬레이션을 수행해야하는 경우 Rigidbody 컴포넌트의 isKinematic 옵션을 사용하여 서버에서만 물리 시뮬레이션을 수행하도록 구현할 수 있습니다.

이외에도 GameObject의 transform 정보와 Rigidbody의 velocity, angularVelocity 정보를 동기화하여 구현할 수 있습니다.

도움이 되셨길 바라며, 추가적인 질문이 있으시면 언제든지 댓글로 문의해주세요!