지금까지는 싱글 플레이를 다뤄봐서 따로 설정이 필요 없었지만 멀티 플레이는 서버와 클라이언트를 따로 봐야하므로 언리얼 에디터에서 Number of Players를 테스트 할 인원수대로 조절하고 Net Mode를 Play As Client로 해야한다.

멀티플레이 실습을 위해 멀티 채팅 프로젝트를 생성했는데 현재 위처럼 설정하고 실행을 한 뒤 종료를 해보면 에러가 발생한다.

현재 구현해놓은 로직에서는 다른 클라이언트에 불필요한 위젯 객체가 생성된다.
위젯 객체는 Owning Client에서만 생성되면 되므로 판별하기 위해 IsLocalController() 함수를 호출한다.
IsLocalController란 위젯 객체를 띄울 클라이언트가 내 PC가 맞는지 판단을 하는것이다.
// CXPlayerController.cpp
...
void ACXPlayerController::BeginPlay()
{
Super::BeginPlay();
if (IsLocalController() == false)
{
return;
}
...
}
...
현재 실행을 해서 채팅을 치면 모든 클라이언트에서 같은 메세지가 뜨는데 이는 언리얼 에디터 설정에서 Run Under One Process 속성을 false로 해야 본인이 친 채팅만 화면에 뜨게 된다.
데디케이티드 서버 환경 설정
에디터 설정에서 아래 옵션들을 확인한다.
1. Allow Late Joining을 체크하면 Add another cliner 버튼으로 클라이언트 추가가 가능하다.

2. Always on top 체크하면 새 클라이언트 화면이 항상 위에 뜬다.
3. Multiplayer Options에서 Launch Seperate Server를 체크하면 서버를 따로 띄운다. 체크를 안하면 에디터 화면이 서버이자 클라이언트가 된다.
4. Multiplayer Options에서 Run Under One Process를 체크하면 같은 프로세스 내에서 공유하는 에셋이 생긴다. 확실한 멀티 플레이 환경이라고 보기엔 힘들지만 성능상의 이점이 있다. 체크하지 않으면 서버와 각 클라이언트들이 다른 프로세스로 분기된다.
추후에 멀티플레이 디버깅 시 체크하고 로깅을 찍어볼 수 있다.
5. 위에서 설정했지만 Net Mode는 Play as Client로, Number of Players는 2이상으로 설정한다.
'멀티플레이 공부' 카테고리의 다른 글
| 멀티플레이 공부(Property Replication) (0) | 2025.11.21 |
|---|---|
| 멀티플레이 공부(Remote Procedure Call, 액터 소유권, WithValidation, UnReliable, Reliable) (0) | 2025.11.20 |
| 멀티플레이 공부(NetRole, Authority, Proxy, Local Role, Remote Role) (0) | 2025.11.19 |
| 멀티플레이 공부(NetMode, NetConnection, NetDriver, Ownership) (0) | 2025.11.18 |
| 멀티플레이 공부(Server, Client, Dedicated Server 흐름도, 특징) (0) | 2025.11.17 |