Unreal
[Unreal C++] 리슨 서버 연결하기
푸쿠이
2021. 5. 31. 23:32
리슨 서버
이전에 리슨 서버에 대해 간단하게 정리한 게 있었다.
2021.05.17 - [게임 엔진/[Unreal] Engine] - [Unreal] 멀티 플레이 정리 (데디케이트 서버, 리슨 서버)
데디케이트 서버를 하려면 언리얼 소스 코드를 내려받아야해서, 비교적 간단한 리슨 서버를 배웠다.
그래서 이 프로젝트에서는 리슨 서버를 사용할 것이다.
리슨 서버 구현하기
리슨 서버는 간단하다. 다 구현되어있어서 사실 구현할 것도 없다.
IP 127.0.0.1는 LocalHost로 자기 컴퓨터를 가리킨다.
IP 주소를 입력받아서 처리하려면, UI에서 입력받아서 파라미터로 넘기면 된다.
#include "Kismet/GameplayStatics.h"
void ATitle_PC::CreateServer()
{
UGameplayStatics::OpenLevel(GetWorld(), FName("Main"), true, ((FString)(L"Listen")));
}
void ATitle_PC::JoinServer()
{
UGameplayStatics::OpenLevel(GetWorld(), FName("127.0.0.1")); // Level 이름 대신 IP 주소.
}
나는 이렇게 구현한 함수를 버튼의 클릭 이벤트에 달았다.
UCLASS()
class MYRPG_API UUW_NaviMenu : public UUserWidget
{
GENERATED_BODY()
public:
virtual void NativeConstruct() override;
private:
UPROPERTY(Meta = (BindWidget))
class UButton* CreateServerBtn;
UPROPERTY(Meta = (BindWidget))
class UButton* JoinServerBtn;
UFUNCTION()
void CreateServerHandler();
UFUNCTION()
void JoinServerHandler();
};
void UUW_NaviMenu::NativeConstruct()
{
Super::NativeConstruct();
CreateServerBtn->OnClicked.AddDynamic(this, &UUW_NaviMenu::CreateServerHandler);
JoinServerBtn->OnClicked.AddDynamic(this, &UUW_NaviMenu::JoinServerHandler);
}
void UUW_NaviMenu::CreateServerHandler()
{
ATitle_PC* MyPC = Cast<ATitle_PC>(GetOwningPlayer());
if (MyPC)
{
MyPC->CreateServer();
}
}
void UUW_NaviMenu::JoinServerHandler()
{
ATitle_PC* MyPC = Cast<ATitle_PC>(GetOwningPlayer());
if (MyPC)
{
MyPC->JoinServer();
}
}
Character 클래스는 기본적으로 서버와 클라이언트 간의 동기화가 활성화되어있다.
Main으로 이동했으면 Main을 담당하는 PlayerController에서 기본 값들을 설정해준다.
#include "Main_PC.h"
void AMain_PC::BeginPlay()
{
SetShowMouseCursor(false);
SetInputMode(FInputModeGameOnly());
}
여러 개의 창으로 테스트하는 방법은 Title 레벨에서 이렇게 설정하면 된다.
Title 레벨에서는 아직 서버에 연동되어있지 않기에, Play Standalone으로 설정해야한다.
구현 결과