[UE_5] 모듈 제작 -6.1(Custom Editor Tab)
저번에 만들었던 Custom 메뉴 Extension 에서 이번에는 Custom Tab을 새로 열어볼 예정이다.
ContentBrowser에서 특정 메뉴 Extension을 통해서 새로운 Tab을 열려면
void FSuperManagerModule::RegisterAdvanceDeletionTab()
{
//Tab 매니저를 호출해서 새로운 탭을 등록하고
FGlobalTabmanager::Get()->RegisterNomadTabSpawner(FName("AdvanceDeletion"),
// 마찬가지로 델리게이트를 통해서 연결을 시킨다.
FOnSpawnTab::CreateRaw(this, &FSuperManagerModule::OnSpawnAdvanceDeletionTab)).SetDisplayName(FText::FromString(TEXT("AdvanceDeletion")));
}
// FOnSpawnTab을 들어가면 델리게이트에 필요한 매개변수 데이터형을 파악할 수 있고,
TSharedRef<SDockTab> FSuperManagerModule::OnSpawnAdvanceDeletionTab(const FSpawnTabArgs& args)
{
//이를 통해 적합한 데이터형을 반환하는 함수를 생성한다.
// ETabRole은 탭이 어떤 기능을 하는지 보여주는 타입인데 아무것도 없는 탭을 일단 꺼내보자
return SNew(SDockTab).TabRole(ETabRole::NomadTab);
}
https://docs.unrealengine.com/4.27/en-US/API/Runtime/Slate/Widgets/Docking/ETabRole/
ETabRole
How will this tab be used.
docs.unrealengine.com
https://docs.unrealengine.com/4.27/ko/ProgrammingAndScripting/Slate/InGameUI/
게임내 슬레이트 사용하기
게임내 유저 인터페이스에 Slate UI 위젯 사용하기 입니다.
docs.unrealengine.com
Slate Widget이라는 클래스를 만들고,
//Widget을 만드는 기본적인 header 인거 같다.
#include "Widgets/SCompoundWidget.h"
// 원래 있던 내용들 다 지우고 여기있는 것들로 기본 구성을 한다.
class SAdvanceDeletionTab : public SCompoundWidget
{
//slate의 생성자 느낌이다.
SLATE_BEGIN_ARGS(SAdvanceDeletionTab){}
SLATE_ARGUMENT(FString,TestString)
SLATE_END_ARGS()
public:
void Construct(const FArguments& InArgs);
};
void SAdvanceDeletionTab::Construct(const FArguments& InArgs)
{
//Can the widget ever support keyboard focus 이라는 언리얼 공식 문서의 설명이다.
// 말하자면, 키보드의 입력을 받는다의 기능을 하는 코드이다.
bCanSupportFocus = true;
// 생성자에서 자식 slot에 있는 기능을 실행시키고,(_TestString의 string화)
ChildSlot
[
SNew(STextBlock).Text(FText::FromString(InArgs._TestString))
];
}
https://docs.unrealengine.com/4.26/en-US/API/Runtime/SlateCore/Widgets/SWidget/
SWidget
Abstract base class for Slate widgets.
docs.unrealengine.com
TSharedRef<SDockTab> FSuperManagerModule::OnSpawnAdvanceDeletionTab(const FSpawnTabArgs& args)
{
return SNew(SDockTab).TabRole(ETabRole::NomadTab)
// []은 하나의 슬롯이라고 보면 된다.
// SAdvanceDeletionTab의 기능을 실행시킨다.
[
SNew(SAdvanceDeletionTab).TestString(TEXT("Data Passing Test"))
];
}
앞서 SLATE_ARGUMENT(FString,TestString) 의 기능을 생성하고, 생성된 슬롯에
SAdvanceDeletionTab 위젯 클래스를 넣고 원하는 출력 데이터를 넣는다.
그러면 새로운 Tab에 출력 데이터가 나오게 된다.
어찌보면 UI 위젯을 코드로 작성하는 방법이다.
void SAdvanceDeletionTab::Construct(const FArguments& InArgs)
{
bCanSupportFocus = true;
FSlateFontInfo TitleTextFont = FCoreStyle::Get().GetFontStyle(FName("EmbossedText"));
TitleTextFont.Size = 30;
ChildSlot
[
//SNew(STextBlock).Text(FText::FromString(InArgs._TestString))
//Create Main verticalBox
SNew(SVerticalBox)
//First vertical slot for title text
+SVerticalBox::Slot().AutoHeight()
[
SNew(STextBlock)
.Text(FText::FromString(TEXT("Advance Deletion")))
.Font(TitleTextFont)
.Justification(ETextJustify::Center)
.ColorAndOpacity(FColor::White)
]
];
}
이런식으로 자세히 보면 실제 위젯의 기능들을 전부 다 가지고 있고, 별도의 문법으로 설정이 전부 가능하다.
심지어 Widget이랑 섞어서도 만들 수 있기에 더욱 용이할거 같다.
나머지는 다음시간에 이어서 작성해보도록 하겠다.