언리얼 도큐먼트에 보면 게임모드가 리플리케이트 되지 않는 다는 내용을 볼수 있긴 하지만
실행을 하다보면 게임모드가 클라에 있는 경우를 볼 수 가있는데 왜 그런것인지 한번 파악을 해보자
용어 정리
새 에디터 창(PIE) : 새로운 창에서 실행 화면을 띄움 (Client, Server 를 구분하면서 보기에 유용하다)
스탠드 얼론(Stand alone) : 독립형 게임을 말한다
리슨서버 : 서버와 클라 동시에 실행되는 서버를 말한다
데디케이트 서버 : 렌더링 관련기능 등이 언리얼에서 빠진 오직 서버 기능만이 있는 서버를 말한다
멀티 환경 설정
보다 정확한 멀티 플레이 세팅을 하려면 아래 단일 프로세스 하 실행 옵션을 해제해야한다
옵션이 체크되면 하나의 프로세스에서 실행 되다보니 값이 중복되는 등 제대로된 상태를 보기 어렵게 된다
테스크
월드에 큐브를 하나 배치하고 이 큐브에 대한 메터리얼 세팅하는 테스트를 하기위해 다음과 같이 세팅한다
큐브를 레벨에 올리고 다음과 같이 블루프린트를 만들어준다
큐브의 리플리케이션 설정은 다음과 같다
Net Load On Client : 클라이언트에 맵이 로드되면서 동시에 이 항목이 체크된 해당 액터도 맵과 함께 클라이언트에게 보여지게 된다
게임모드의 실행여부를 확인하기 위해 게임모드 클래스를 상속받는다
void ANSGameMode::BeginPlay()
{
Super::BeginPlay();
GEngine->AddOnScreenDebugMessage(-1, 100.f, FColor::Red, FString::Printf(TEXT("AGameMode::BeginPlay")));
Play Offiline 로 실행할경우 게임모드의 존재 여부를 살펴보면
넷 모드를 Play Offline 으로 세팅하고 실행해보면
Play Offiline 으로 할 경우
Role 이 Autority 이고 게임모드의 BeginPlay 또한 호출 되는 것을 볼 수가 있다
이때에는 게임 모드가 클라이언트에서도 실행이 되며 존재한다(실행 자체가 클라임으로)
아래와 같이 클라이언트에서 실행 되었지만 게임모드는 클라에서 만들어졌기 때문에 Role 이 Authority 이며
게임모드 BeginPlay 또한 실행 된것을 볼 수 있으며 메터리얼 또한
노란색 무늬가 있는 메터리얼로 씌워진 것을 볼 수 있다
(멀티 플레이어 옵션에서 -> 플레이어 수 를 늘려도 마찬가지)
Play As Listen Server 로 플레이 하는 경우
서버에서는 GameMode 의 Role 가 Authority 이며 GameMode::BeginPlay 또한 호출 된것을 볼수 있으며 게임 모드가 존재 한다는 것을 알수 있다
하지만 클라이언트에서는 GameMode 의 Role 가 None 이며GameMode::BeginPlay 또한 호출 되지 않았다는 것을 알 수 있다(존재하지 않음으로)
Play As Client 로 테스트를 하기 위해선 아래 과정들이 필요하다
먼저 서버를 위한 빌드를 하나 한다
프로젝트 세팅에서 다음 처럼 세팅한다음 빌드를 한 후
아래 처럼 서버바로 가기를 세팅 한다
?Listen -Rex=500 -ReY=350 -WINDOWED
서버를 실행 .exe
서버(리슨서버)를 띄웠으니 당연히 Authority 에 큐브 또한 노란색 띄 메터리얼이 입혀졌다
게임모드의 BeginPlay 도 호출된것을 볼 수 있다
서버를 띄운 다음
또한 콘솔 명령으로 Open 1278.0.0.1 로 클라이언트에서 서버쪽으로 붙을 수가 있다
멀티 플레이 환경 세팅이 되었다는 가정 하에 게임 모드가 존재하는 상황이 있는데
서버 역할을 하는 경우와
?Listen -Rex=500 -ReY=350 -WINDOWED
에디터에서 Play As Client 로 실행하면
에디터에서 실행한 화면이 Server 가 아닌 Client 라는 것을 타이틀창에서 알수 있으며
게임모드의 Role 또한 None 이며 Beginplay 또한 호출되지 않은 즉 게임모드가 존재 하지 않는 다는 거을 알 수가 있다
추가로 붙은 클라이언트에서도 마찬가지인 상황을 알 수가 있다
게임 모드의 존재 유무 정리
Play as Offline 으로 실행 될때 게임 모드가 존재하며 Role 이 Authority 인것을 알수 있고
서버로 실행 되었을때에도 마찬가지로 Authority 이면서 BeginPlay 가 호출된것을 볼 수가 있다
멀티 환경에서 게임 모드는 서버에서 클라로 Replicated 되지 않고 서버에만 존재하지만
Play as Offline 인 클라이언트 단독으로만 실행 할 경우에는 게임모드가 클라이언트에서 생성 되고 삭제 되고 다른곳에 복제 시킬 일도 없음으로 클라이언트 자체가 GameMode 의 Authority 가 된다는 것을 알 수가 있다
Role_Authority 란 서버만을 얘기 하는 것이 아니라(보통은 서버) 해당 오브젝트가 생성되어 실질적으로 관리를 하고 있는 대상에 따라 Authority 가 된다
ex)
1. 멀티 환경에서 서버에서 게임모드는 서버가 관리 함으로 서버에서 GameMode 는 Role_Authority
하지만 클라에서는 존재자체를 하지 않음
2. Play As Offline 으로 서버 없이 실행할 경우 클라에 게임모드가 생성이 되며 이때 생성된 게임 모드는 Role 은 Role_Authority 가 된다, 여기서 관리 되고 삭제 됨으로
언리얼 도큐먼트 설명에 나와 있는 클라로 Replicated 하지 않는다,
즉 클라이언트중 게임모드가 존재하지 않는다는 것은
멀티 환경 구성이 갖추어 진상태에서 서버가 존재하지만 Play As Client 로 실행 하여 클라로 붙었을때 게임 모드가 존재하지 않는 것이다라는 것을 알 수 있다
'게임엔진(GameEngine) > Unreal4' 카테고리의 다른 글
커스텀 Character Movement 컴포넌트 초기화 (0) | 2021.06.25 |
---|---|
나나이트 & 퀵셀메가스캔 : 영화퀄리티 에셋을 그냥 올린다 (0) | 2021.05.25 |
버텍스 애니메이션 툴 (0) | 2021.02.17 |
( 무버블과 스테이셔너리 라이트) 다이내믹 섀도잉, 섀도 맵 캐시 (0) | 2021.02.09 |
UE4 full screen resolutions, Tarray<FIntPoint> (0) | 2020.12.16 |