UE에서 사용되는 서버-클라이언트 모델의 경우 게임의 호스트 역할을 하는 서버와 클라이언트로서 게임에 참여하는 플레이어들로 나타낸다.
서버는 게임 스테이트를 관리하며 플레이어들은 원격으로 자신의 캐릭터를 컨트롤한다.
서버는 변경 사항을 연결된 클라이언트로 Replicate하여 모든 플레이어가 서버에서 게임이 플레이되는 것과 같은 경험을 하게된다.
리슨 서버는 자신의 머신에서 게임을 호스팅하는 플레이어이다. 즉 게임을 호스팅하면서 동시에 플레이를 할 수 있는 유저인 샘이다.
데디케이티드 서버의 경우 헤드리스로 실행되는 서버라고하는데, 헤드리스 서버란 비주얼적인 요소들을 렌더링 하지않아 로컬로 플레이를 하지 않는다.(Only 호스팅)
멀티플레이 세션에서 게임 스테이트 정보는 하나의 컴퓨터에만 존재하지않고 인터넷, LAN 등등.. 네트워크 연결을 통해서 다수의 컴퓨터 간 정보를 전달하고 공유한다. Document에서는 "우리는 진짜 무슨일이 있어도 멀티플레이어 지원같은건 없어!!" 같이 강한 확신을 가진게 아니라면 가급적 프로젝트는 항상 멀티플레이어용으로 개발하는것이 좋다 말하고 있다.
내가 잘못본걸수도 있겠지만 싱글플레이에서 멀티플레이로 리팩토링하는게 용이하다는 문구를 Document에서 본 것같은 기억이 있는데.. 기분탓인가 싶다.
이전 포스팅에서도 비슷한 주제를 다뤘었지만 다시 정리하자면, UE에서 멀티 플레이의 가장 핵심적인 부분은 바로 "Replication"이다. 번역하면 복제 라는 뜻인데 모든 로직이 직관적으로 맞아 떨어지는 싱글플레이와 달리 멀티 플레이의 경우 이 Replication과 원격 호출(RPC, Remote Procedure Call)을 사용하여 서버는 현재 게임에서 무슨 일이 일어나고 있는지를, 각 데이터들을 복제하여 몇번 플레이어가 어떤 행동을했고 어떤 상태이며.. 이런 일들을 연결되어있는 클라이언트들에게 복제하여, 각 클라이언트들은 이렇게 복제된 데이터들을 통해 서버에서 일어나는 일들을 시뮬레이션 한다.(Each client then uses this information to simulate a very close approximation of what is happening on the server. 'Networking Overview in UE Document')
약간 두서없이 썼는데 결국 클라이언트들은 서버에서 일어나는 일들의 사본(?)을 보고있다 생각하면 될 것같다.