인프런 커뮤니티 질문&답변

GGolDDuKi님의 프로필 이미지

작성한 질문수

[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part7: MMO 컨텐츠 구현 (Unity + C# 서버 연동 기초)

이동 동기화 #3

점프가 동기화가 되지 않습니다..

24.02.17 00:46 작성

·

252

0

안녕하세요! 루키스님 강의를 토대로 2D 플랫포머 형태의 멀티플레이어 게임을 만들어보고 있습니다! 항상 감사합니다.

 

현재 제가 액션들을 구현하고 동기화를 해보고 있는데,

걷기, 뛰기, 구르기까지는 동기화가 잘 되는데 점프가 동기화가 되질 않습니다..

 

점프는 Rigidbody2D의 AddForce를 사용하여 작동되고,

다른 이동 액션들은 루키스님이 보여주신 방식처럼 다음 프레임의 transform.position을 계산하여 PosInfo에 넣어 패킷을 전송하고 있는데요.

 

점프는 우선 클라이언트에서 AddForce를 통해 점프를 먼저 한 뒤,

현재 위치를 PosInfo에 넣어 패킷을 보내는 방식을 써보았습니다..

그런데 다른 빌드의 화면에서 볼 때, 점프 애니메이션만 작동하고 실질적인 점프는 작동하질 않습니다.

 

디버깅 해보았을 때, 클라이언트 -> 서버로 패킷을 보낼 경우에는 패킷이 정상적으로 송신되는 것으로 보이고,

서버 -> 클라이언트로 패킷을 보내는 경우에도 정상적으로 송신이 되는 것 같은데,

클라이언트에서 서버에서 받은 패킷을 디버깅 하는 방법을 모르겠습니다..

 

좀 오랜시간 붙잡고 있던 문제라 장황하게 늘어놓아 버렸는데, 궁금한 점은 아래와 같습니다.

Q. Rigidbody를 사용한 물리 작용(점프)을 패킷으로 보내기 위해서 제가 사용한 방법이 틀린걸까요?(정말 될 것 같은데 왜 안되는지 모르겠네요..)

답변 1

0

GGolDDuKi님의 프로필 이미지
GGolDDuKi
질문자

2024. 02. 17. 22:36

아! Rigidbody의 Velocity값을 패킷으로 만들어 주고받으니 정상적으로 작동하네요!!

기획상으로 게임 내에 플레이어를 최대 4~8명정도로 설정할까 하는데,

부드러운 조작감을 위해 입력을 받고 플레이어 상태, 위치 정보에 변동이 생길 때마다 패킷을 전송할까 하는데,

서버에서 크게 부담이 될까요..?

GGolDDuKi님의 프로필 이미지
GGolDDuKi
질문자

2024. 02. 17. 23:50

추가적으로 플레이어의 위치 값을 최대한 실시간으로 전달하도록 하고 싶은데,

서버에서 플레이어의 위치와 클라이언트에서 플레이어의 위치가 0.1~0.2정도씩 계속 어긋나는데,

이 정도 차이는 크게 불편함이 없을까요?

강제로 위치를 동기화 해보기 위해 서버에서 모든 플레이어의 위치정보를 패킷으로 쏘고 클라이언트에서 받아 동기화 하도록 해봤는데, 너무 부자연스럽네요 ㅠㅠ

Rookiss님의 프로필 이미지
Rookiss
지식공유자

2024. 02. 18. 01:57

모든 위치를 쏴주는 것은 어차피 안 됩니다.
장르마다 다르지만 보통 1초에 5번 (MMO)으로 동기화 하는 경우도 있고
롤, FPS 등은 더 빠르게 보내긴 합니다.
강제로 위치를 동기화하기보단 보정 처리가 핵심이고,
점프 같은 것은 실시간 위치를 맞추기 보다는 점프하는 타이밍만
클라에 뿌려서 동일하게 시뮬레이션하는게 부드럽게 보입니다.

GGolDDuKi님의 프로필 이미지
GGolDDuKi
질문자

2024. 02. 18. 14:07

그렇군요.. 감사합니다!!