멀티 플레이 환경 설정
Number of Players를 통해 클라이언트 창 개수 (플레이어 수)를 설정할 수 있다
Net Modes > Play as Client를 설정하면 데디케이티드 서버로 실행한다
Editor Preferences > Play > Multiplayer Options 혹은
위에 보이는 고급 세팅을 통해 멀티플레이어 관련 설정을 추가적으로 할 수 있다
Launch separate Server:
체크를 하면, 서버 창이 따로 띄워진다
체크하지 않으면, 에디터 화면이 클라이자 서버로 실행된다
Play Net Mode:
모드에 따라 리슨 서버, 데디 서버, … 등 설정할 수 있다
Run Under One Process:
체크를 하면, 같은 프로세스 내의 에셋을 공유하기 때문에
확실한 멀티플레이 환경이라고 보기는 힘들다 다만 성능상의 이점이 있다
체크하지 않으면, 서버와 각 클라들이 다른 프로세스로 구분된다
멀티 플레이 종류
- P2P Server(Peer to Peer Server)
모든 클라가 서버의 역할을 수행한다
- Listen Server
하나의 클라가 서버의 역할을 수행한다
- Dedicated Server
서버 프로세스 혹은 서버 컴퓨터가 따로 존재하고 서버의 역할을 수행한다
그리고 해당 서버로 클라들이 접속하고 일부 액터들을 복제받는다
Dedicated Server 진행과정
1. Dedicated Server 실행
server.exe를 실행하면 Open Level 명령어와 Listen 명령어가 실행된다
이때 Socket이 생성되며 다른 PC가 접속 가능히디
2. Dedicated Server의 GameMode, GameState 액터 생성
해당 Level에 사용할 GameMode 액터와 GameState를 생성한다
GameMode 액터는 전체 게임 진행을 감독 및 판단을 하고 Server PC에만 존재한다는 점이 중요하다
GameState 액터는 Server PC에 생성된 후 추후 플레이어가 들어오면 복제된다
3. 클라 PC의 Dedicated Server 접속
클라가 서버에 접속하려면 서버 PC의 IP 주소가 필요하다
세션 서비스는 접속할 IP 주소를 적절하게 주고받게끔 중계해주는 서비스이다
따라서, 방을 만들면 (서버 PC에 Level을 띄우고 IP주소를 중앙 서버에 등록)
클라들에게 게임 플레이 요청 시 만들어진 방의 IP 주소를 반환해 준다
이를 통해, 클라는 접속 명령어로 “Open (서버아이피주소)”를 실행한다
이처럼 서버는 자신이 오픈한 Level을 알려주고 클라도 동일한 Level을 오픈한다
그리고 클라 PC가 동일한 Level을 오픈하는 데 성공했다고 알려주면,
서버 PC는 해당 Client1 전용 PlayerController와 Pawn, PlayerState를 생성하고
Client1 PC에 패킷을 통해 Replicate 시킨다
4. 2번 클라 PC의 Dedicated Server 접속
2번 클라도 “Open (서버아이피주소)” 명령어로 접속을 시도하고 Level을 띄운다
그럼 서버는 2번 클라의 PlayerController, Pawn 그리고 PlayerState를 생성한다
여기서 주의점은
서버에서는 모든 클라의 플레이어 컨트롤러가 생성이 되고
0번부터 인덱싱하며 생성한다
그리고 각 클라는 자신의 플레이어 컨트롤러만 복제받는다
예를 들어, 2번 클라 PC에는 1번 클라의 플레이어 컨트롤러 액터가 없다
또한, 각 클라에서는 본인이 0번 플레이어 컨트롤러로 인식된다
예를들어, 2번 클라의 플레이어 컨트롤러는 2번 클라 PC 내에서 0번 플레이어 컨트롤러라는 것이다
즉, PlayerController 액터는 Server PC와 Owning PC에만 존재하고 Other PC에는 없다
반면 Pawn은 Other PC에도 모두 존재한다
다시 말해, Owning Computer 기준으로 다른 클라가 접속하면,
Owning Computer에서 다른 클라들의 Pawn과 PlayerState가 복제된다는 것이다
서버에서만 호출되는 함수들과 서버에서만 생성되는 액터들
- 서버에서만 호출되는 함수들
PossessedBy(), TakeDamage() 같은 특정 함수들은 서버에서만 호출이 된다
그렇기에 해당 함수 내에서 로직을 작성하고 클라에서 실행되길 기대해서는 안된다
그리고 이러한 함수들을 활용해 Server에서만 로직을 처리하고 쉽게 복제되도록 구현할 수 있다
- 서버에서만 생성되는 액터
플레이어스테이트, 플레이어컨트롤러, 폰은 서버에서 생성되고 클라에게 복제된다
그리고 게임스테이트도 서버에서 생성되고 복제된다
반면, 게임모드는 복제되지 않는다
이를 주의하고 활용하면,
복제되는 액터는 Server에서 로직을 처리하면 알아서 복제되니 이를 활용하면 된다
복제되지 않는 액터(ex. GameMode)는 Server에서만 로직이 처리된다는 것을 인지하고
다른 액터들을 통해 각 PC들에게 전달해야 한다
'게임 엔진 > [코드조선] 언리얼 데디서버' 카테고리의 다른 글
Replicated, ReplicatedUsing 키워드 (0) | 2025.03.07 |
---|---|
함수 내부에서의 구분 (0) | 2025.03.07 |
RPC 활용 (0) | 2025.03.07 |
RPC 키워드 사용법 (0) | 2025.03.07 |
RPC (Remote Procedure Call) (0) | 2025.03.07 |