커스텀 기능 추가
목적
엔진에 커스텀 기능을 추가하기
- 기능은 각 구현 세부마다 다를 수 있으므로 창이 보이는게 목표
- 엔진 상단에 아래와 같이 보이게 한다.

- MatineeMenus.cpp등과 같이 기존에 작성된 엔진 코드를 참조하여 구현 합니다.
Windows옆에 드랍다운 추가
1. Build.cs수정
using UnrealBuildTool;
public class TestEditor : ModuleRules
{
public TestEditor(ReadOnlyTargetRules Target) : base(Target)
{
PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs;
PrivateDependencyModuleNames.AddRange(
new string[] {
"Slate",
"SlateCore",
"EditorStyle",
"UnrealEd",
"Core",
"CoreUObject",
"Engine",
"UnrealEd"
}
);
PrivateIncludePaths.Add("TestEditor/Private");
}
}
- “Slate”, “SlateCore”, “EditorStyle”, “UnrealEd” 을 추가 합니다.
2. 메뉴 확장자(MenuBarExtension) 추가.
- 레벨 에디터 모듈을 불러옵니다
- 메뉴 확장자를 생성 합니다.
- b의 확장자에 메뉴를 등록 합니다.
- LevelEditor가 메뉴 확장자를 사용할 수 있도록 등록 해줍니다.
void FTestEditor::StartupModule()
{
// 메뉴 확장자 생성
TSharedPtr<FExtender> MenuExtender = MakeShareable(new FExtender());
// 메뉴 확장 바인딩
MenuExtender->AddMenuBarExtension(
// 붙일 메뉴 위치(창 메뉴를 기준)
"Window",
// 위치 기준
EExtensionHook::After,
// 커맨드 리스트 (없으면 nullptr)
nullptr,
// 생성된 이후 호출될 델리게이트
FMenuBarExtensionDelegate::CreateRaw(this, &FTestEditor::AddMenuBarEntry)
);
// 레벨 에디터 모듈 참조
FLevelEditorModule& LevelEditorModule = FModuleManager::LoadModuleChecked<FLevelEditorModule>("LevelEditor");
// 레벨 에디터에 메뉴 확장자 등록
LevelEditorModule.GetMenuExtensibilityManager()->AddExtender(MenuExtender);
}
하지만 아직 보이지 않는다..

3. FTestEditor::AddMenuBarEntry 구현
AddMenuBarExtension에 연결된 AddMenuBarEntry을 구현 해준다
void FTestEditor::AddMenuBarEntry(FMenuBarBuilder& MenuBarBuilder)
{
MenuBarBuilder.AddPullDownMenu(
// 드롭다운 메뉴 이름
FText::FromString("MyDropdown"),
// 툴팁
FText::FromString("Open My Dropdown"),
// 생성후 호출될 델리게이트
FNewMenuDelegate(),
// 메뉴 hook (id)
"MyDropdown"
);
}

-
메뉴 추가 완료
하지만 눌러도 아무런 반응이 없다..
⇒ 하위에 컨텐츠들이 없어서 그렇다.
⇒ FNewMenuDelegate 구현 해줘야 함.
4. 드랍다운 구현
AddPullDownMenu에서 델리게이트를 구현 해준다.
-
델리게이트 연결
void FTestEditor::AddMenuBarEntry(FMenuBarBuilder& MenuBarBuilder) { MenuBarBuilder.AddPullDownMenu( // 드롭다운 메뉴 이름 FText::FromString("MyDropdown"), // 툴팁 FText::FromString("Open My Dropdown"), // 생성후 호출될 델리게이트 FNewMenuDelegate::CreateRaw(this, &FTestEditor::FillPulldownMenu), // 메뉴 hook (id) "MyDropdown" ); } -
메뉴 구현
메서드를 포인터로 연결 해주거나
람다식으로 구현이 가능하다.
void FTestEditor::FillPulldownMenu(FMenuBuilder& MenuBuilder) { MenuBuilder.AddMenuEntry( // 메뉴 이름 FText::FromString("Option 1"), // 툴팁 FText::FromString("Do something 1"), // 아이콘 FSlateIcon(), // 클릭후 실행될 Action FUIAction( //FExecuteAction = 델리게이트 FExecuteAction::CreateLambda([this]() { UE_LOG(LogTemp, Log, TEXT("Option 1 clicked Lambda!")); }) ) ); MenuBuilder.AddMenuEntry( FText::FromString("Option 2"), FText::FromString("Do something 2"), FSlateIcon(), FUIAction(FExecuteAction::CreateRaw(this, &FTestEditor::OnClickMenuFun)) ); }

PREVIOUS에디터 버튼 추가
NEXT컨텐츠 브라우저 편집