서론
- 멀티플레이어 게임에서는 서버(Server)와 클라이언트(Client)가 존재함.
- 서버는 독립적으로 실행되는 게임의 인스턴스이고, 클라이언트는 각 플레이어가 실행하는 게임의 인스턴스입니다.
서버의 종류
- Dedicated Server (전용 서버):
- 플레이어 없이 게임 시뮬레이션만 실행됩니다.
- 화면에 렌더링하지 않지만, 게임 내 모든 동작(예: 플레이어 이동, 전투, 경험치 획득 등)은 서버에서 처리된다.
- Listen Server (리슨 서버):
- 게임 호스트(Host)가 서버 역할을 맡는 모델입니다.
- 호스트 플레이어는 서버와 클라이언트를 동시에 실행하며, 네트워크 지연(Lag)이 없습니다.
- 다른 클라이언트들은 네트워크를 통해 호스트와 통신한다.
언리얼 엔진의 멀티플레이어 원칙
- 서버는 게임의 권위(authoritative) 있는 버전으로 간주됩니다.
- 예: 캐릭터의 위치 정보가 서버와 클라이언트 간에 다를 경우, 서버의 정보가 올바른 것으로 간주됩니다.
- 중요한 로직(예: 게임 규칙, 플레이어 생성, 게임 재시작 등)은 반드시 서버에서 처리되어야 합니다.
주요 클래스의 멀티플레이어 관계
- 언리얼 엔진 멀티플레이어 환경에서 주요 클래스들이 서버와 클라이언트에서 어떻게 동작하는지
- Game Mode:
- 서버에만 존재하며, 클라이언트에서는 접근할 수 없습니다.
- 게임 규칙, 플레이어 생성, 게임 재시작과 같은 작업을 처리합니다.
- Player Controller:
- 서버와 클라이언트 모두에 존재합니다.
- 서버는 모든 플레이어의 Player Controller를 가지고 있지만, 클라이언트는 자기 자신의 Player Controller만 가지고 있습니다.
- Player State:
- 모든 플레이어의 Player State가 서버와 모든 클라이언트에 복제됩니다.
- 예: 클라이언트는 자신의 Player State뿐만 아니라 다른 플레이어의 Player State도 가지고 있습니다.
- Pawn:
- 서버와 모든 클라이언트에 존재하며, 모든 Pawn이 복제됩니다.
- 각 클라이언트는 자신의 Pawn뿐만 아니라 다른 플레이어의 Pawn도 볼 수 있어야 하기 때문입니다.