서버에서 클라이언트의 충돌처리와 타격 판정을 그대로 시뮬레이션 한다는 것의 의미

서버에서 클라이언트의 충돌처리와 타격 판정을 그대로 시뮬레이션 한다는 것은 단지 판정의 공정성을 높이기만 하는 것이 아니다.

클라이언트와 서버가 같은 코드를 공유하고 입력값만으로 같은 결과를 낸다는 의미이다. 즉 완전한 데드레커닝 기술을 구현했다는 뜻이다.

예를 들어 서로 다른 클라이언트 A와 B가 있을때 A가 컨트롤 하는 플레이어가 좌우로 마우스를 흔들면서 전진(sin곡선을 그리며)하는 경우, 완전한 데드레커닝 기술이 구현되지 않았을 경우 B클라이언트에선 거의 직선처럼 움직이거나 삼각파형을 그리며 움직이는 것으로 보일 수 있다.
제대로 데드레커닝을 구현했다면 B클라이언트에서도 A클라이언트의 움직임은 완전하게 재현된다. 시간차는 있을 망정 이동궤적은 정확히 재현된다.
또한 B클라이언트에서 A클라이언트의 플레이어 캐릭터를 완전하게 리모트 컨트롤하는것도 가능하다. 실제로 내 게임 개발할때 그것이 가능했다. 중복접속해서 한개의 플레이어 캐릭터를 클라이언트 A와 B에서 함께 컨트롤 하는것도 가능했다.
서버에서 임의의 플레이어 PC를 리모트 컨트롤 하는 것도 가능하다. 클라이언트 A, 서버 , 클라이언트 B가 하나의 캐릭터를 공동으로 컨트롤 하는 것이 가능한 것이다. 이때 사용자는 화면상에 보여지는 캐릭터가 리모트 컨트롤 되고 있는지, 내가 로컬에서 컨트롤 하는 것인지 움직임을 보고는 알 수 없다. 입력값에 따라 모두 똑같은 결과를 보여주기 때문이다.

흔히 사용하는 ‘클라이언트의 요청에 의해 서버가 결과를 돌려주는 방식’에만 의존하지 않는다. 능동적으로 서버가 게임처리를 주도할 수 있다.

프로그래밍 방식이 간편해지고 할 수 있는것도 훨씬 많아진다. 서버 프로그래머가 3D를 모를지라도 3D기반의 컨텐츠를 서버에서 얹을 수 있다.

온갖 편법(클라이언트는 3D인데 서버는 2D타일 기반이라 위치핵을 막기 위해 사용했던 온갖 꿀꿀한 코드들이라든가)을 사용하지 않아도 된다.

이만큼 설명해도 ‘대체 서버에서 클라이언트의 동작으 시뮬레이션 하는 것이 무슨 쓸모가 있지?’ 라고 반문한다면 사실 나로선 할 말이 없다.
뭐 게임이란 그런 것이니까.
숫자놀음이든 미소녀 그림 컬렉션이든 돈만 벌면 그만인것이니까.


답글 남기기

댓글을 게시하려면 다음의 방법 중 하나를 사용하여 로그인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

%s에 연결하는 중