Plugin Start
Unreal plugin 시작방법 예제이다.
1. 메뉴바 -> 편집 -> 플러그인
2. 오른쪽 하단 새 플러그인 클릭
3. 에디터 툴바를 사용하는 "에디터 툴바 버튼"으로 플러그인 생성 (MyPlugin)
4. 프로젝트 재시작 시 에디터 툴바에 MyPlugin을 확인할 수 있음
5. 플러그인 소스는 visual studio 프로젝트에서 수정할 수 있음
모듈 기본 코드
Header
#pragma once
#include "CoreMinimal.h"
#include "Modules/ModuleManager.h"
class FToolBarBuilder;
class FMenuBuilder;
class FMyPluginModule : public IModuleInterface
{
public:
/** IModuleInterface implementation */
virtual void StartupModule() override;
virtual void ShutdownModule() override;
/** This function will be bound to Command. */
void PluginButtonClicked();
private:
void AddToolbarExtension(FToolBarBuilder& Builder);
void AddMenuExtension(FMenuBuilder& Builder);
private:
TSharedPtr<class FUICommandList> PluginCommands;
};
Source
이부분을 통해 모듈 초기화 함수가 정의되고, 모듈의 초기 세팅이 수행된다.
IMPLEMENT_MODULE(FPluginExampleModule, PluginExample)
// Copyright 1998-2019 Epic Games, Inc. All Rights Reserved.
#include "MyPlugin.h"
#include "MyPluginStyle.h"
#include "MyPluginCommands.h"
#include "Misc/MessageDialog.h"
#include "Framework/MultiBox/MultiBoxBuilder.h"
#include "LevelEditor.h"
static const FName MyPluginTabName("MyPlugin");
#define LOCTEXT_NAMESPACE "FMyPluginModule"
void FMyPluginModule::StartupModule()
{
// This code will execute after your module is loaded into memory; the exact timing is specified in the .uplugin file per-module
FMyPluginStyle::Initialize();
FMyPluginStyle::ReloadTextures();
FMyPluginCommands::Register();
PluginCommands = MakeShareable(new FUICommandList);
PluginCommands->MapAction(
FMyPluginCommands::Get().PluginAction,
FExecuteAction::CreateRaw(this, &FMyPluginModule::PluginButtonClicked),
FCanExecuteAction());
FLevelEditorModule& LevelEditorModule = FModuleManager::LoadModuleChecked<FLevelEditorModule>("LevelEditor");
{
TSharedPtr<FExtender> MenuExtender = MakeShareable(new FExtender());
MenuExtender->AddMenuExtension("WindowLayout", EExtensionHook::After, PluginCommands, FMenuExtensionDelegate::CreateRaw(this, &FMyPluginModule::AddMenuExtension));
LevelEditorModule.GetMenuExtensibilityManager()->AddExtender(MenuExtender);
}
{
TSharedPtr<FExtender> ToolbarExtender = MakeShareable(new FExtender);
ToolbarExtender->AddToolBarExtension("Settings", EExtensionHook::After, PluginCommands, FToolBarExtensionDelegate::CreateRaw(this, &FMyPluginModule::AddToolbarExtension));
LevelEditorModule.GetToolBarExtensibilityManager()->AddExtender(ToolbarExtender);
}
}
void FMyPluginModule::ShutdownModule()
{
// This function may be called during shutdown to clean up your module. For modules that support dynamic reloading,
// we call this function before unloading the module.
FMyPluginStyle::Shutdown();
FMyPluginCommands::Unregister();
}
void FMyPluginModule::PluginButtonClicked()
{
// Put your "OnButtonClicked" stuff here
FText DialogText = FText::Format(
LOCTEXT("PluginButtonDialogText", "Add code to {0} in {1} to override this button's actions"),
FText::FromString(TEXT("FMyPluginModule::PluginButtonClicked()")),
FText::FromString(TEXT("MyPlugin.cpp"))
);
FMessageDialog::Open(EAppMsgType::Ok, DialogText);
}
void FMyPluginModule::AddMenuExtension(FMenuBuilder& Builder)
{
Builder.AddMenuEntry(FMyPluginCommands::Get().PluginAction);
}
void FMyPluginModule::AddToolbarExtension(FToolBarBuilder& Builder)
{
Builder.AddToolBarButton(FMyPluginCommands::Get().PluginAction);
}
#undef LOCTEXT_NAMESPACE
IMPLEMENT_MODULE(FMyPluginModule, MyPlugin)
Unreal Plugin에서 dll을 delay load 시 생기는 크래시 이슈
answers.unrealengine.com/questions/401885/delay-load-dlls-causing-breakpoint-1.html
'게임 엔진 > Unreal' 카테고리의 다른 글
[Unreal] [Editor] [Example] Slate 예제 1 (0) | 2020.06.22 |
---|---|
[Unreal] [Editor] [Example] Slate 예제 2 (0) | 2020.06.22 |
[Unreal] Animation Notify를 이용한 충돌처리 (AnimNotify, Collision) (0) | 2020.06.14 |
[Unreal] Physics Body의 기하 정보를 이용한 충돌처리 (0) | 2020.06.13 |
[Unreal] [Example] 콘솔 커맨드 제작 방법 (Console Command) (0) | 2020.06.12 |