저의 목표는 제가 좋아하는 MMORPG를 직접 만들어보는 것입니다.
MMORPG는 여러 플레이어가 같은 월드에서 함께 플레이하는 장르이기 때문에, 멀티플레이 구조를 이해하는 것이 중요하다고 생각했습니다.
그래서 이번에는 언리얼에서 서버가 어떻게 초기화되고, 클라이언트가 서버에 접속할 때 어떤 흐름으로 게임에 참여하게 되는지
공부해보려고 합니다.
Network Mode

우선 네트워크 모드 종류에 대해 알아보고자 한다.

(출처:https://www.youtube.com/watch?v=JOJP0CvpB8w&list=PLgIBMlWm501pi21I23ad4cwpJBGNuKi_h&index=6)
| Net Mode | 플레이가 가능한가? | Authority가 있는가? | 클라이언트 접속이 가능한가? | 의미. |
| Standalone | O | O | X | 혼자 실행하는 싱글플레이 |
| DedicatedServer | X | O | O | 화면 없는 전용 서버 |
| ListenServer | O | O | O | 플레이어도 겸하는 서버 |
| Client | O | X | X | 서버에 접속한 일반 클리언트 |
- Standalone : 싱글플레이 실행 상태입니다.
서버 / 클라이언트가 분리되어 있지 않고, 혼자 실행하는 모드 입니다.
즉, 단독 실행이기 때문에 자기 자신이 서버처럼 모든 권한을 가지고 있습니다. - DedicatedServer : 서버 전용 실행 모드이고, 직접 플레이하는 플레이어는 없습니다.
즉, 서버는 게임 월드를 관리하지만 화면 렌더링이나 입력 처리는 하지 않습니다. - ListenServer : 서버이면서 동시에 한 명의 플레이어기도 한 상태입니다.
쉽게 말하면 "방장 PC가 서버 역할까지 하는 구조"입니다.
예를 들어 4인 협동 게임에서 방장이 게임을 만들고, 다른 사람들이 방장에게 접속하는 방식입니다. - Client : 서버에 접속한 일반 클라이언트 입니다.
GameMode 와 Login
게임 모드는 서버에서 게임의 규칙과 흐름을 총괄하는 클래스입니다.
쉽게 말하면, 게임의 사회자 역할이라고 보면 됩니다. 누가 접속할 수 있는지, 어떤 플레이어 컨트롤러를 사용할지,
게임을 언제 시작할지 등을 모두 게임 모드가 결정합니다.
멀티플레이 환경에서 플레이어가 서버에 접속하면, 게임 모드는 정해진 순서에 따라 접속 과정을 처리합니다.
순서는 다음과 같습니다!
- PreLogin : 접속 요청 심사
클라이언트가 "나 들어가도 돼요?" 하고 요청하면, 서버가 먼저 검토하는 단계입니다.
여기서 벤 처리나 서버 인원 초과 여부를 체크할 수 있습니다. - Login : 플레이어 컨트롤러 생성
접속이 허용되면 해당 플레이어를 위한 PlayerController를 만드는 단계입니다.
플레이어 컨트롤러는 플레이어와 서버를 연결하는 다리 역할을 합니다. - PostLogin : 기본 설정 마무리
플레이어가 게임에 참여하기 위한 초기 설정(캐릭터 스폰, UI 세팅 등)을 마무리하는 단계입니다.
가장 많이 커스터마이징 하는 구간이기도 합니다. - StartPlay : 게임 시작 신호
서버가 게임 시작을 선언하는 함수입니다. - BeginPlay : 모든 엑터에 게임 시작 전달
StartPlay가 호출되면, 월드에 있는 모든 액터들의 BeginPlay가 순차적으로 호출됩니다.


실습 과정

