실시간 멀티 플레이어 플랫 포머 게임을 만드는 데 무엇이 관련됩니까?


13

네트워크 / 인터넷을 통해 작업하고 싶은 "협업"기능이있는 플랫 포머 게임을 만들고 있습니다.

이제 모든 프로그래머가 게임 네트워킹에 대해 알아야 할 내용 과 같은 기사를 포함하여 네트워크 게임 프로그래밍에 대해 읽었으며 Peer-to-Peer 잠금 단계 및 서버 클라이언트 예측 아키텍처와 같은 기술의 차이점을 이해합니다.

  • 인터넷을 통해 진행되는 실시간 게임의 경우 Peer-to-Peer 잠금 단계는 옵션이 아니라고 결론을 내 렸습니다.
  • 또한 플랫 포머의 경우에도 간단한 클라이언트-서버 아키텍처 (어떤 종류의 클라이언트 예측이 없음)로 인해 서버 왕복으로 인한 동작과 반응 사이의 지연으로 인해 게임 플레이가 저하 될 수 있습니다. (중앙 서버의 필요성을 없애고 싶다고 말했기 때문에 클라이언트 인 플레이어 중 한 명만이 실제로이 지연을 경험할 것입니다).

이것은 클라이언트 예측을 남기지 만 플랫 포머와 같은 간단한 게임의 경우에도 여전히 복잡하게 들립니다.

멀티 플레이어 플랫 포머 게임을위한 작동중인 클라이언트 예측 시스템을 만들려면 어떻게해야합니까?


1
협동 게임에서 걱정할 것이 훨씬 적은 것은 부정 행위입니다.)
Jonathan Connell

나는 이것을 건설적이지 않은 것으로 표시했다. 제기 된 질문 ( "클라이언트 예측을 사용하는 네트워크 게임을 작성하는 데 얼마나 많은 노력이 필요합니까? 네트워킹 코드로 구성된 코드베이스의 절반으로 끝날 것입니까?")은 너무 광범위하고 문제에 국한되지 않습니다. 대답은 기본적으로 "의존적"일 것입니다. 이것은 좋은 대답이 아닙니다.
TravisG

-1, "얼마나 많은 일"이 주관적입니다.
Tetrad

1
얼마나 많은 일을 하는가, 주관적이지는 않지만 주관적이지는 않지만 몇 가지 요소 (게임의 크기, 정확성 요구 사항 등)에 의존합니다. 어떤 유형 의 작업이 더 좋은 질문인지); 그러나 OP는 실제로 많은 노력이 필요하며 코드베이스 에서이 유형의 코드가 얼마나 큰지 묻고 있다고 생각합니다. 말했듯이, 너무 광범위 할 수 있습니다. 나는 더 좁은 해석을 선택하고 그에 대답했다. OP는 질문을 몇 가지 매우 구체적인 지점으로 좁히기 위해 조금 더 노력해야한다고 생각합니다.
Nate

@Tetrad 죄송합니다-이 질문을 가능한 한 객관적으로 만들기 위해 최선을 다했지만, 제 질문은 "Y 형 게임에 대해 클라이언트 작동 예측 시스템을 만드는 것이 어렵습니다"로 끝납니다. 하지만 시간이 제한되어있어 X 일 재생 후 너무 많은 학습이 너무 늦습니다. Y에 대한 자세한 내용을 제공하려고하지만 "너무 현지화 된"질문을하고 싶지 않습니다. 여기서 가장 큰 문제는 모든 플랫 포머에게 공통적 인 운동입니다 (다른 사람들 이이 질문을 유용하게 사용하기를 원합니다). 이 질문을 개선 할 수 있다면 제안을 부탁드립니다.
Justin

답변:


5

이와 같은 기능을 구현하기로 결정하면 코드베이스의 절반이 네트워크 코드로 바뀔 것이라고 생각하지 않습니다.

내 의견으로는, 이것을 수행하는 가장 간단한 방법은 모든 사용자 입력을 가능한 한 빨리 받아들이는 "중앙"서버를 설정하는 것입니다. 각 클라이언트에게 다시 보냅니다.

클라이언트에서는 키보드에서 P1을, 네트워크에서 P2를 읽는 것을 제외하고 로컬에서 두 명의 플레이어를 대상으로 협동 게임을 할 때와 다르게 이것을 구현합니다.

서버는 가끔씩 전체 게임 상태를 보내야하며, 두 클라이언트 모두 서버에서 새로운 권한 상태로 스냅하거나 몇 초 동안 새로운 상태로 슬라이드 할 수 있습니다. 서버 당 끔찍한 패킷 손실이나 많은 클라이언트가 없다면이 방법은 개요에 따라 충분합니다.


클라이언트 서버 접근 방식만큼 쉽습니다 (한 클라이언트가 서버를 호스팅하는 것을 제외하고-> 전용 서버가 필요하지 않지만 어떻게 든 결정된 서버가 필요한 UDP + NAT 펀치 스루 라인으로 가야합니다). 둘째, 당신은 잠금 단계 방법을 제안합니다 (완전한 게임 상태를 보내는 것에 대해 이야기 할 때), IMHO는 아닙니다 .IMHO는 게임이 클라이언트 서버가 훨씬 쉬운 인터넷을 통해 (아마 LAN을 통해) 실행되는 경우 가장 좋은 방법입니다. 구현.
Valmond

1
아니요, 때때로 전체 게임 상태를 보내서 클라이언트가 너무 멀지 않은지 확인할 수 있습니다.
Nate

2

클라이언트 예측 기능이있는 완전히 기능적인 mMORPG 스타일 게임을 가지고 있습니다 (게임은 아직 끝나지 않았지만 '확인'을 실행합니다). 서버에는 40.000 줄의 코드와 클라이언트에는 두 배의 코드가 있습니다 (도구 등에 동일한 양 추가) ). 예측은 아마도 수백 줄을 넘지 않으며 (그렇더라도) 전체 네트워크 부분은 수천 줄을 나타내지 만 5.000을 넘지 않습니다 (선을 그리는 위치에 따라 조금씩 다름).

퍼지 질문 퍼지 답변 ;-)


2

네트워킹 코드의 상당 부분은 재생중인 게임과 무관 할 수 있습니다. 그 때문에 그리고 네트워킹을 처음 사용하기 때문에 가장 먼저 제안하는 것은 그 작업을 수행 할 라이브러리를 찾는 것입니다. 예를 들어 RakNet.

게임 코드에서 원하는 것은 보간 및 예측에 사용할 수있는 여러 가지 다른 게임 상태를 처리하는 기능입니다. 처음에는 디자인하기가 쉽지만 기존 싱글 플레이어 게임을 수정하는 경우 상당한 양의 작업이 될 수 있습니다.

또한 인터넷을 통해 낯선 사람이 P2P 게임을하도록하려면 로비 / 매치 메이킹을 처리하는 서버가 하나 이상 있어야합니다.

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