일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- CS
- UE_5
- 메테리얼
- 언리얼엔진5 #언리얼 클라이언트 프로그래밍
- topdownmove
- A* Algorithm
- 코드리뷰
- C++
- 헤더 경로
- Gas
- 원카페#무인카페#카페추천#카페맛집
- 언리얼 엔진5 #언리얼 클라이언트 프로그래밍
- Toon Shading
- STL
- build.cs
- Unreal
- 오늘밤 세계에서 이 사랑이 사라진다 해도 #독후감 #오열
- 언리얼
- leetcode
- 순환 리스트
- c++ 베이직
- 툰쉐이딩
- Console
- CS50
- 네트워크 기초
- 브론즈
- Module
- 백준
- 폭설 #미친 날씨
- Harvard
- Today
- Total
WN_인생기록
[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이랑 섞어서도 만들 수 있기에 더욱 용이할거 같다.
나머지는 다음시간에 이어서 작성해보도록 하겠다.
'언리얼 개발 > 이것저것 테스트' 카테고리의 다른 글
[UE_5] Constrain to Plane (0) | 2024.05.13 |
---|---|
[UE_5] 모듈 제작 -5 (엔진 메뉴 Extension) (0) | 2024.04.22 |
[UE_5] 모듈 제작 -4 (Start with Editor Utility) (0) | 2024.04.22 |
[UE_5] 모듈 제작 -3 (메세지 출력(Notify,Dialog)) (0) | 2024.04.20 |
[UE_5] 모듈 제작 -2 (에셋 복제) (0) | 2024.04.20 |