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

오늘의논리님의 프로필 이미지
오늘의논리

작성한 질문수

[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버

몬스터 충돌판정

해결된 질문

작성

·

101

0

안녕하세요 강의를 보고 배운 서버와 dx11로 3d게임을 만들어 보고있습니다. 이동동기화 등은 잘 됬고 몬스터를 만들었는데 접속한 클라에서 모두 동일하게 로직이 돌아가야하니 몬스터의 로직은 서버에서 돌아가게 만들었습니다.

그런데 플레이어가 몬스터를 타격하면 타격한 플레이어가 타격했다는 패킷을 보내고 플레이어가 플레이어를 타격하면 피격당한 플레이어가 패킷을 보내는 식으로 했는데

투사체 같은경우 몬스터가 투사체를 맞았다 라는건 서버에서도 충돌체를 두고 몬스터가 검증을 해야할까요? 클라에서 판단하더라도 그러면 여러 클라가 있을경우 여러 클라가 다 맞았다는 패킷을 보낼것 같아 뇌가 꼬입니다...

물론 방법이야 많겠지만 이부분 구현에 있어 감이 안잡혀 질문드립니다 ㅠㅠ

답변 2

0

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

상식적으로 몬스터도 투사체를 쏘는데, 그것은 클라에서 판정할 수 없으므로
서버에서도 판정을 돌리는게 해주는게 맞습니다.
그래서 데디서버가 아닌 MMO 서버로 만들려면
이런 물리나 충돌 부분도 러프하게 만들어야해서 많이 까다롭습니다.

일부 3D 게임에서 몬스터가 아닌 캐릭터의 투사체는,
그 캐릭터의 클라 PC에서 연산해서 서버에 충돌 패킷을 보내고
그것을 서버에서 러프하게 검사해서 데미지 판정을 하는 식으로 구현이 되어 있습니다.

만약 언리얼 네트워크를 활용한 데디서버로 만든다면
애당초 이런 부분도 서버에서 틱을 돌면서 해주겠죠.

0

안녕하세요, 인프런 AI 인턴입니다.

오늘의논리님의 질문에 대한 구체적인 답변을 제공하기 위해 관련 내용을 검토했습니다. 질문의 핵심은 “몬스터와 투사체의 충돌 판정을 서버에서 처리해야 하는가”와 관련된 것으로 이해됩니다.

이와 관련하여, 철권이나 FPS 게임에서 공격 판정시 서버에서도 충돌 판정 등의 수학적 연산을 시뮬레이션하는 예시를 들고 계신 지식공유자의 답변이 유사한 상황에 대한 해결책을 제시하고 있습니다. 서버에서 충돌 판정을 처리하는 것이 일반적입니다(현업에서 서버 구축 관련 답변 참고). 이 과정에서 서버는 스킬, 이동, 혹은 투사체의 충돌 등과 같이 게임 내 상호작용에 대한 기본적인 로직을 수행합니다. 클라이언트는 서버로부터 받은 결과를 바탕으로 시각적인 표현만을 담당하게 됩니다.

충돌 판정 로직의 경우, 모든 클라이언트에서 각각 판단하기보다는 서버가 이를 중앙에서 처리하고 그 결과를 클라이언트에 전달하는 방식이 일관된 게임 플레이를 유지하고 부정행위를 방지하는 데 도움이 됩니다. 특히 멀티플레이어 환경에서 모든 중요한 판정을 서버에서 처리하는 것은 일반적인 접근 방식입니다.

서버에서 몬스터와 투사체의 충돌을 판정할 때, 몬스터와 투사체의 위치 정보 등을 기반으로 충돌 체크를 수행하고, 해당 결과를 패킷으로 클라이언트에 전송합니다. 이 방식은 클라이언트 간의 동기화를 유지하며, 모든 플레이어에게 일관된 게임 상태를 제공할 수 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

오늘의논리님의 프로필 이미지
오늘의논리

작성한 질문수

질문하기