문제

네트워크 게임을 만들까 생각 중이에요.저는 이 분야에 처음 접했고 추측 항법 및 네트워크 대기 시간에 대한 좋은 계획을 세우는 데 이미 많은 문제에 직면했기 때문에 이 주제에 대한 좋은 문헌을 보고 싶습니다.제가 고려한 방법들을 설명하겠습니다.

원래는 플레이어의 입력을 서버로 보내고 그곳에서 시뮬레이션한 다음 게임 상태의 변경 사항을 모든 플레이어에게 방송했습니다.이로 인해 부정행위가 어려워졌지만 대기 시간이 길어지면 자신의 행동에 대한 결과를 즉시 확인할 수 없기 때문에 제어하기가 약간 어려웠습니다.

이 GamaSutra 기사 대역폭을 절약하고 클라이언트에서도 시뮬레이션하여 로컬 입력을 원활하게 표시하는 솔루션이 있지만 치트 방지 기능은 창 밖으로 던져버리는 것 같습니다.또한 플레이어가 환경을 조작하고 돌을 밀거나 하는 등의 작업을 시작하면 어떻게 해야 할지 모르겠습니다.이전에 중립이었던 이러한 개체는 일시적으로 클라이언트가 PDU를 보내야 하는 개체가 되거나 여러 플레이어가 동시에 수행하는 개체가 됩니다.누구의 PDU가 승리할까요?각 플레이어가 객체를 이중으로 추적하는 것을 언제 중단합니까(예상 항법 버전과 비교하기 위해)?천국에서는 두 선수가 스모 경기에 참여하는 것을 금지합니다(예:서로 밀기 시작합니다).

이 gamedev.net 비트 가마수트라 솔루션은 부적절하다고 보여주지만 공동으로 바위를 밀어내는 예시를 실제로 수정하지 못하는 다른 방법을 설명합니다.내가 찾은 다른 대부분의 것들은 저격수에게만 해당됩니다.나는 SNES Zelda와 같은 게임에 좀 더 적합하지만 물리/운동량이 조금 더 포함된 것을 보고 싶습니다.

  • 메모:여기서는 물리 시뮬레이션에 대해 묻는 것이 아닙니다. 다른 라이브러리에서도 해당 내용을 다룹니다.네트워크 지연에도 불구하고 게임을 원활하고 반응적으로 만들기 위한 전략입니다.
도움이 되었습니까?

해결책

소스 엔진에서 Valve가 어떻게 작동하는지 확인해 보세요: http://developer.valvesoftware.com/wiki/Source_Multiplayer_Networking

1인칭 슈팅 게임이라면 아마도 다음과 같이 그들이 언급하는 몇 가지 주제를 조사해야 할 것입니다.예측, 보상, 보간.

다른 팁

내가 찾은 이 네트워크 물리학 블로그 게시물 글렌 피들러(Glenn Fiedler)의 글, 그리고 그 아래의 응답/토론은 더욱 훌륭합니다.꽤 길지만 그만한 가치가 있습니다.

요약하자면

현대 게임 물리 시뮬레이션에서 클라이언트 입력이 수신될 때마다 서버는 시뮬레이션 반복을 따라갈 수 없습니다(예:차량 또는 강체 역학).따라서 서버는 들어오는 모든 패킷이 서버에 필요하기 전에 JIT로 들어오도록 모든 클라이언트의 대기 시간+지터(시간)를 서버보다 먼저 주문합니다.

그는 또한 귀하가 요청하는 소유권 유형을 처리하는 방법에 대한 개요를 제공합니다.그가 GDC에서 보여준 슬라이드는 정말 멋졌습니다!

부정 행위에 대해

Fiedler 자신(및 다른 사람들)은 이 알고리즘이 치트 방지 기능이 부족하다고 말합니다.이것은 사실이 아닙니다.이 알고리즘은 기존 클라이언트/서버 예측보다 활용하기 쉽거나 어렵습니다(기존 클라이언트/서버 예측에 관한 기사 참조). @CD 산체스의 답변).

확실히 말하자면:서버는 적시에 네트워크 물리적 위치를 수신하기 때문에(기존 예측에서 x 밀리초 늦지 않고) 속임수를 쓰기가 쉽지 않습니다.클라이언트는 모두 기존 예측과 동일한 대기 시간으로 상대방의 위치 정보를 수신하므로 전혀 영향을 받지 않습니다.

어떤 알고리즘을 선택하든 주요 타이틀을 출시하는 경우 치트 방지 기능을 추가할 수 있습니다.그렇다면 암호화를 추가하는 것이 좋습니다. 스투지 봇 (예를 들어 XOR 스트림 암호 여기서 "키스트림은 의사 난수 생성기에 의해 생성됩니다") 및 균열에 대한 간단한 온전성 검사를 수행합니다.일부 개발자는 또한 바이너리가 손상되지 않았는지 확인하거나(크랙 위험을 줄이기 위해) 사용자가 디버거를 실행하고 있지 않은지 확인하기 위해(크랙이 발생할 위험을 줄이기 위해) 알고리즘을 구현하지만 이에 대해서는 논쟁의 여지가 더 많습니다.

수천 명의 플레이어만 플레이할 수 있는 소규모 인디 게임을 만들고 있다면 1) 필요할 때까지 치트 방지 알고리즘을 구현하지 마세요.또는 2) 사용자 기반이 성장합니다.

우리는 필수 서버와 예측을 하는 원격 플레이어를 기반으로 하는 멀티플레이어 스네이크 게임을 구현했습니다.150ms마다(대부분의 경우) 서버는 각 원격 플레이어가 보낸 모든 통합 움직임이 포함된 메시지를 다시 보냅니다.원격 클라이언트 이동이 서버에 늦게 도착하면 해당 이동을 삭제합니다.클라이언트는 마지막 움직임을 재생합니다.

XNA Creator's Club 웹사이트에서 네트워킹 교육 주제를 확인하세요.네트워크 아키텍처(피어 투 피어 또는 클라이언트/서버), 네트워크 예측 및 기타 몇 가지 사항(물론 XNA의 맥락에서)과 같은 주제를 자세히 살펴봅니다.이는 원하는 답변을 찾는 데 도움이 될 수 있습니다.

http://creators.xna.com/education/catalog/?contenttype=0&devarea=19&sort=1

해당 지역의 평균 대기 시간에 따라 모든 클라이언트에 대기 시간을 부과해 볼 수 있습니다.이렇게 하면 클라이언트가 대기 시간 문제를 해결하려고 시도할 수 있으며 이는 대부분의 플레이어에게 비슷하게 느껴질 것입니다.

물론 모든 사람에게 500ms 지연을 강요하라고 제안하는 것은 아니지만 50ms를 가진 사람들은 게임 플레이가 더 원활하게 나타나도록 150(추가 100ms 추가)이면 괜찮을 수 있습니다.

간단히 말해서;플레이어가 3명인 경우:

  • 남자:30ms
  • 폴:150ms
  • 에이미:80ms

계산 후에는 데이터를 클라이언트에게 동시에 다시 보내는 대신 대기 시간을 고려하여 John보다 먼저 Paul과 Amy에게 보내기 시작합니다.

그러나 이 접근 방식은 전화 접속 연결이나 무선 사용자가 모든 사람을 혼란에 빠뜨릴 수 있는 극단적인 대기 시간 상황에서는 실행 가능하지 않습니다.하지만 그것은 아이디어입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top