클라이언트 / 서버간에 충돌 감지가 서버 측 또는 협력 적으로 수행되어야합니까?


24

충돌 감지 처리가 매우 심한 온라인 게임을 만들고 있습니다. 플레이어 모델은 서버 측에만 존재하는 (클라이언트 데이터 파일에 저장되지 않은) 다른 플레이어, 몹, 구조, 지형 및 솔리드 오브젝트와 충돌합니다.

보안을 위해 모든 충돌 감지 서버 쪽을 수행해야합니까? 아니면 클라이언트가 탐지를 수행하고 서버가 어떻게 든 후속 조치를 취하도록해야합니까? 서버 자체로는 너무 많은 일이 될 것 같습니다 (한 서버에서 수백 명의 플레이어를위한 엔진을 설계하고 있습니다).

주류 MMO가 어떻게하는지 알고 있습니까? 나는 현재 거의 모든 MMO가 물리학 핵에 취약하고 일반적으로 핵을 탐지하고 사람들을 금지함으로써 그것들을 처리한다는 것을 알고 있습니다. 차라리 적어도 물리학 구성 요소에는 해킹이 전혀 작동하지 않았습니다.

답변:


21

명백한 대답은 대부분의 탐지 클라이언트 측 (부드럽게하기 위해)을 수행 한 다음 클라이언트가 너무 멀리 떨어져 있으면 서버가 말하는 것에 보간하는 것 같습니다. 서버는 클라이언트보다 덜 빈번한 속도로 (예 : 10hz) 똑딱 거리며 아마도 "이 플레이어가 현재 마지막으로 알려진 위치에서 왔다고 말할 수있는"몇 가지 기본 코드가 필요할 것입니다. 일종의 탐색 메쉬 유형 솔루션 및 경로 찾기.

요구 사항에 따라 엄청나게 느릴 수 있습니다. 예를 들어 서버에서 플레이어-플레이어 충돌을 신경 쓰지 않기 위해 디자인 결정을 내릴 수 있습니다. 내가 아는 한 대부분의 게임은 클라이언트의 게임조차 신경 쓰지 않습니다. 그것은 실제로 당신의 필요에 달려 있습니다.

그러나 경험 상으로는 클라이언트를 절대 믿지 않아야합니다. 게임 플레이에 영향을 미치는 경우 최소한 서버에서 확인해야합니다.


24

여기에 몇 가지 대답이 있습니다.

  • 클라이언트 측 충돌은 성능 관점과 플레이어 느낌 관점에서 이상적입니다. 당신은 충돌이 게으 르기를 원하지 않고, 플레이어가 단단한 물체에 부딪쳐 멈추기를 원합니다. 서버 측에서 작업하는 경우 모든 장소에서 고무 밴드 플레이어를 보거나 플레이어가 움직일 때 눈에 띄게 지연됩니다. 두 경우 모두 나쁜 모조.

  • 보안 측면에서 서버 측 충돌은 이상적입니다. 고객이 "멍청한 터미널"에 가까워 질수록 게임의 악용이 줄어 듭니다. 텍스트 기반의 MUD를 플레이하는 사람이 아무도 벽 해킹이나 스피드 핵에 대해 걱정할 필요가없는 이유가 있습니다. 클라이언트가 언급 할만한 일을하지 않기 때문입니다.

  • 이렇게 둘은 거의 모든 경우에 "적합"입니다. 클라이언트가 자신의 작업을 수행 한 다음 서버에서 사람들을 속이지 않도록 다시 확인하십시오. 단점은 복잡성, 동기화 ( 두 가지가 일치하지 않을 경우 정확히 수행 하는 작업) 및 서버 CPU 사용량이 상당히 많다는 것입니다.

  • 내가 권장하는 것은 거의 전적으로 클라이언트 측에서하는 것입니다. 클라이언트는 완전한 클라이언트 측 시스템에서와 같이 자신의 위치에 대해 권한을 가지며 모든 자체 처리를 수행합니다. 또한 서버가 무작위로 한 번에 여러 플레이어를 확인하게합니다. 서버로드를 낮게 유지하십시오. 그러나 이것은 사기꾼을 놀라 울 정도로 빠르게 근절시킬 것입니다.

또는 지금은 클라이언트 측에서 수행하고, 사람들이 속이는 게임으로 인기가 높아질 경우 나중에 서버 측 확인을 추가하십시오. 솔직히 말하면 아마도 그렇지 않을 것이므로 지금 당장 코더 시간을 소비 할 필요가 없습니다.


3

월드 오브 워크래프트는 플레이어 / 몹 사이의 충돌 감지를하지 않습니다. 이 결정에는 기술적 이유가 있거나 없을 수도 있지만 실제로는 기술적 결정보다 게임 디자인 결정에 더 가깝습니다.

플레이어 대 플레이어 상황에서 얼마나 악용 될 수 있는지 상상해보십시오. 또는 다른 (종종 유휴 상태 인) 플레이어가 당신의 움직임을 막았다면 은행 / 경매장 / 사서함을 사용하는 것이 얼마나 어려울까요!

클라이언트 대 서버 기반 충돌 감지의 경우 실제로 이동이 매우 느리지 않는 한 주로 클라이언트 측이어야하므로 각 클라이언트가 올바르게 보입니다. 지연 / 지연 충돌 응답 및 / 또는 '보이지 않는'객체와 충돌하는 것은 매우 불쾌합니다.


1
질문은 플레이어 대 몹 / 플레이어 충돌이 나쁜 게임 디자인인지 아닌지에 관한 것이 아니지만, 모든 것이 견고한 Darkfall Online과 같은 게임을 보는 것이 좋습니다. 게임 플레이에 새로운 차원을 추가하고 게임으로 매우 흥미로운 일을 할 수 있습니다. 플레이어가 게임을 열기 위해 볼 수있는 작은 간격이 항상 있기 때문에 플레이어가 게임에서 은행과 같은 것을 차단하는 것에 대해 걱정하지 않을 것입니다.
BarakatX2

공격 할 수있는 대상과 공격 할 수없는 대상으로 플레이어를 막을 수 있습니다. 예를 들어, 플레이어는 폭도를 공격 할 수 있기 때문에 폭도를 걸을 수 없습니다. 또한 PVP로 표시되어 있기 때문에 PVP로 표시되는 동안 플레이어를 걸을 수 없습니다. PVP로 표시되지 않은 플레이어는 해당 플레이어를 공격 할 수 없기 때문에 PVP로 표시되지 않은 플레이어까지도 모든 플레이어를 통과 할 수 있습니다.
Azaral

2

해킹에 대해 걱정하고 게임 플레이에 큰 영향을 미치는 경우 대답은 YES입니다.

"도시 구축"종류의 게임 인 브라우저 기반 게임에서는 저장된 게임 상태를 레이아웃 할 때 클라이언트 엔진이 실패하지 않기 때문에 해킹에 대해 신경 쓰지 않습니다.

그러나 플레이어가 더 많은 주택 / 건물을 건설하기 위해 게임 가능 영역을 확장하기 위해 게임 코인 (또는 프리미엄 현금)을 사용해야하므로 게임 플레이를 남용 할 수 있습니다. 그래서 새로 추가 된 건물이 점유 한 타일 수를 간단히 확인하고 사용 가능한 무료 타일 수를 다시 구현하려고합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.