[Unreal/C++] 리슨 서버 오픈 레벨 Play as Listen Server Open Level
언리얼 엔진 에서 리슨 서버를 열기 위해 OpenLevel을 사용할 수 있습니다.
OpenLevel은 UGameplayStatics 클래스가 가지고 있으며 #include "Kismet/GameplayStatics.h" 헤더를 추가해 사용할 수 있습니다.
OpenLevel의 구문은 월드, 레벨 이름, 절대이동, 옵션을 사용합니다.
static void OpenLevel
(
const UObject * WorldContextObject,
FName LevelName,
bool bAbsolute,
FString Options
)
레벨 이름의 경우 검색 속도를 위해 전체 경로를 포함해주는 것이 좋지만 레벨 이름만 적어도 상관 없습니다.
bool 형 변수 bAbsolute의 경우 절대 이동과 상대 이동의 차이가 있다고 합니다. 상대 이동은 이전 이동 매개변수(예: 팀, 캐릭터 등)를 유지하면서 맵을 변경하는 것이었고, 절대는 모든 것을 "재설정"하여 맵을 변경하는 데 사용되었습니다.
옵션의 경우 명령줄 인수를 통해 여러 옵션을 설정할 수 있다고 하는데 현재 지식으로는 아직 정확한 사용법을 모릅니다.
다만 Listen서버를 열기 위해 필요한 옵션은 Listen입니다.
Unreal Engine의 코드를 살펴보면 옵션 중 Listen이나 LAN 등의 옵션이 지정되어 있으며 URL의 참조를 위해 필요한 것 같습니다.
위젯에서 Listen 서버를 열고 해당 서버에 참여하는 코드는 다음과 같습니다.
UGameplayStatics::OpenLevel(GetWorld(), FName("LevelName"), true, ((FString)(L"Listen")));
전체 적인 서버 생성 코드에서 중요하게 확인해야 하는 것은 없습니다.
버튼을 클릭하면 단순히 OpenLevel 함수를 호출하는 것 입니다.
#include "Lobby/Widgets/W_HostServer.h"
#include "Kismet/GameplayStatics.h"
#include "Components/Button.h"
void UW_HostServer::NativeConstruct()
{
Super::NativeConstruct();
Btn_Create->OnClicked.AddDynamic(this, &UW_HostServer::Btn_Create_OnClick);
}
void UW_HostServer::Btn_Create_OnClick()
{
UGameplayStatics::OpenLevel(GetWorld(), FName("TestLevel"), true, ((FString)(L"Listen")));
}
마찬가지로 열린 서버에 참여하는 것은 레벨의 이름 대신 주소를 적습니다.
UGameplayStatics::OpenLevel(GetWorld(), FName( IP Address ));
해당 코드에서는 자기 자신을 가리키는 127.0.0.1(IP 프로토콜의 약속) 을 사용합니다.
자신의 IP주소를 직접 적어도 무방합니다.
#include "Lobby/Widgets/W_JoinServer.h"
#include "Kismet/GameplayStatics.h"
#include "Components/Button.h"
void UW_JoinServer::NativeConstruct()
{
Super::NativeConstruct();
Btn_Connect->OnClicked.AddDynamic(this, &UW_JoinServer::Btn_Connect_OnClick);
}
void UW_JoinServer::Btn_Connect_OnClick()
{
UGameplayStatics::OpenLevel(GetWorld(), FName("127.0.0.1"));
}
이렇게 직접 생성하고 연결할 경우 언리얼 에디터에서 넷 모드를 Play Standalone으로 변경해주어야 합니다.
아무런 셋팅 없이 Play As Listen Server로 시작할 경우 OpenLevel을 실행시키는 순간 모든 클라이언트가 각각의 서버를 만들게 되는 것 같았습니다. 이 부분에 대해 알고 계신 분은 공유 부탁드립니다.
완성된 화면입니다.
'Unreal > Manual' 카테고리의 다른 글
Unreal C++ 코드 디버깅, 콜 스택(Call Stack) 로그 출력 (1) | 2023.12.16 |
---|---|
Unreal C++ 버튼을 눌러 게임 종료 (QuitGame) (0) | 2023.12.16 |
Unreal C++ 위젯(UserWidget)의 Native 함수 초기화와 생성 (0) | 2023.12.11 |
Unreal C++ 위젯(UserWidget) 버튼 클릭 이벤트 (Button OnClick Event) (0) | 2023.12.11 |
Unreal 액터(Actor)의 생명 주기(Life Cycle) (0) | 2023.12.10 |