[UE] 툴바 만들기(ButtonCommand), 문자(MBCS, Unicode)

목차
Plugins | ||
Example | ||
ButtonCommand.h .cpp Example.Build.cs ExampleConsoleCommand.h .cpp ExampleDebuggerCategory.h .cpp ExampleModule.h .cpp StaticMesh_Detail.h .cpp |
||
Source | ||
Utilities | ||
CHelper.h CLog.h .cpp |
||
Global.h CStaticMesh.h .cpp .Build.cs |
||
.uproject | ||
툴바 만들기
CPC-949 (MBCS) vs. euc-kr (Unicode)
한글은 아스키코드의 줄바뀜 문자(\n) 뒤에 위치해있기 때문에
한글을 줄바꿈 문자로 간주한다.
CPC-949 (MBCS, Multi-Byte Character Set)
- 1 byte는 1 byte로 처리. 2 byte는 2 byte로 처리.
- Unreal
- Visual Studio의 기본설정. 바꿀 수 있다.
euc-kr (Unicode)
- 무조건 2 byte로 처리
OpenFileDialogA 는 1byte
OpenFileDialogW는 2byte. 한글사용 가능
Visual Studio 내에서의 문자 설정

Example.Build.cs
Example.Build.cs
더보기
using UnrealBuildTool; public class Example : ModuleRules { public Example(ReadOnlyTargetRules Target) : base(Target) //public은 외부에 공개 { PCHUsage = ModuleRules.PCHUsageMode.UseExplicitOrSharedPCHs; PublicIncludePaths.Add(ModuleDirectory); PublicDependencyModuleNames.Add("Core"); PrivateDependencyModuleNames.Add("U2212_05"); //본인 모델은 private PrivateDependencyModuleNames.Add("CoreUObject"); PrivateDependencyModuleNames.Add("Engine"); PrivateDependencyModuleNames.Add("Slate"); PrivateDependencyModuleNames.Add("SlateCore"); PrivateDependencyModuleNames.Add("GameplayDebugger"); PrivateDependencyModuleNames.Add("DesktopPlatform"); PrivateDependencyModuleNames.Add("MainFrame"); PrivateDependencyModuleNames.Add("EditorStyle");//추가 } }
추가
- PrivateDependencyModuleNames.Add("EditorStyle");
ButtonCommand
ButtonCommand.h
더보기
#pragma once #include "CoreMinimal.h" #include "Framework/Commands/Commands.h" class EXAMPLE_API FButtonCommand : public TCommands<FButtonCommand> { public: FButtonCommand(); ~FButtonCommand(); public: void RegisterCommands() override; public: TSharedPtr<FUICommandList> Command; public: TSharedPtr<FUICommandInfo> LoadMesh; private: void OnClicked_LoadMesh(); };
변수 추가
- TSharedPtr<FUICommandInfo> LoadMesh;
함수 추가
- OnClicked_LoadMesh();
ButtonCommand.cpp
더보기
#include "ButtonCommand.h" FButtonCommand::FButtonCommand() : TCommands("ToolBar_Buttons", FText(), NAME_None,FEditorStyle::GetStyleSetName())//ToolBar_Buttons는 총괄 객체의 이름 { Command = MakeShareable(new FUICommandList()); } FButtonCommand::~FButtonCommand() { if (Command.IsValid()) Command.Reset(); } void FButtonCommand::RegisterCommands() { #define LOCTEXT_NAMESPACE "" UI_COMMAND(LoadMesh, "LoadMesh", "", EUserInterfaceActionType::Button, FInputChord());//버튼, 체크박스, 라디오버튼 등 원는 방식으로 버튼을 만들어준다. #undef LOCTEXT_NAMESPACE Command->MapAction(LoadMesh, FExecuteAction::CreateRaw(this, &FButtonCommand::OnClicked_LoadMesh));//LoadMesh실행을 위해 OnClicked_LoadMesh를FExecuteAction::CreateRaw으로 연결해준다. } void FButtonCommand::OnClicked_LoadMesh() { GLog->Log("OnClick"); }
ExampleModule.h .cpp
ExampleModule.h
더보기
#pragma once #include "CoreMinimal.h" #include "Modules/ModuleManager.h" class FExampleModule : public IModuleInterface { public: virtual void StartupModule() override; virtual void ShutdownModule() override; private: TSharedPtr<class FExampleConsoleCommand> ConsoleCommand; private: TSharedPtr<FExtender> Extender;//확장을 위한 Extender private: void AddToolBar(class FToolBarBuilder& InBuilder);//버튼을 추가하는 역할 };
변수 추가
- TSharedPtr<FExtender> Extender;
함수 추가
- void AddToolBar(class FToolBarBuilder& InBuilder);
ExampleModule.cpp
더보기
#include "ExampleModule.h" #include "ExampleDubuggerCategory.h" #include "ExampleConsoleCommand.h" #include "StaticMesh_Detail.h" #include "ButtonCommand.h" #include "U2212_05/CStaticMesh.h" #include "GameplayDebugger.h" #include "LevelEditor.h" #define LOCTEXT_NAMESPACE "FExampleModule" IMPLEMENT_MODULE(FExampleModule, Example)//모듈의 시작점을 알려준다. void FExampleModule::StartupModule() { //Debugger { IGameplayDebugger::FOnGetCategory category; category.BindStatic(&FExampleDubuggerCategory::MakeInstance); IGameplayDebugger::Get().RegisterCategory("Example", category, EGameplayDebuggerCategoryState::EnabledInGameAndSimulate, 5); //5번 슬롯 할당 IGameplayDebugger::Get().NotifyCategoriesChanged(); } //Console Command { ConsoleCommand = MakeShareable(new FExampleConsoleCommand()); } //Property Editor - StaticMeshActor { FOnGetDetailCustomizationInstance instance; //싱글톤 instance.BindStatic(&FStaticMesh_Detail::MakeInstance);//Bind로 묶어준다.//StaticMeshActor_Detail.h에서 static으로 만든 MakeInstance 사용. FPropertyEditorModule& prop = FModuleManager::LoadModuleChecked<FPropertyEditorModule>("PropertyEditor"); prop.RegisterCustomClassLayout(ACStaticMesh::StaticClass()->GetFName(), instance); } //ToolBar(=ButtonCommand) { FButtonCommand::Register(); Extender = MakeShareable(new FExtender());//Extender 생성 FToolBarExtensionDelegate toolBar; toolBar.BindRaw(this, &FExampleModule::AddToolBar);//toolBar와 AddToolBar를 연결 Extender->AddToolBarExtension("Compile", EExtensionHook::Before, FButtonCommand::Get().Command, toolBar); FLevelEditorModule& levelEditor = FModuleManager::LoadModuleChecked<FLevelEditorModule>("LevelEditor");//LevelEditorModule을 불러온다. levelEditor.GetToolBarExtensibilityManager()->AddExtender(Extender);//levelEditor에 Extender를 추가 } } void FExampleModule::ShutdownModule() { if (IGameplayDebugger::IsAvailable()) IGameplayDebugger::Get().UnregisterCategory("Example"); if (ConsoleCommand.IsValid()) ConsoleCommand.Reset(); //스마트포인터를 제거할 수 있도록 Reset()을 콜 해준다. 자동화가 문제가 되는경우가 있으므로 넣어준다. } void FExampleModule::AddToolBar(FToolBarBuilder& InBuilder) { FString name = TEXT("메시"); InBuilder.AddSeparator(); //언리얼 에디터 툴바의 구분선(|) InBuilder.AddToolBarButton ( FButtonCommand::Get().LoadMesh, "LoadMesh", //InExtensionHook FText::FromString(name), //InLabelOverride FText::FromString("Load Mesh Data") //InToolTipOverride ); } #undef LOCTEXT_NAMESPACE
StartupModule에 ToolBar(=ButtonCommand) 생성
- Extender 생성
함수 정의
- AddToolBar(FToolBarBuilder& InBuilder)
툴바에 한글을 사용하고 싶은 경우
해당 솔루션 파일의 .cpp를 다른 이름으로 인코딩하여 저장한다. 그 후에 빌드를 진행한다.



해당 작업들을 먼저 한 후에 빌드를 진행한다.
실행화면

언리얼 에디터 상에 '메시' 버튼이 생성되었다.
'메시'버튼을 누르면 출력 로그에 OnClick이 출력된다.
언리얼 에디터 상의 설정
에디터 개인설정 - UI 익스텐션 포인트 디스플레이
에디터 개인설정 - Developer Tools - UI 익스텐션 포인트 디스플레이

체크를 한다고 바로 적용되어 보이지 않는다. Unreal Editor를 종료 후 다시 열어준다.

위와 같이 초록색 글자로 버튼 커멘드를 TEXT로 보여준다.
'⭐ Unreal Engine > UE Plugin - Basic' 카테고리의 다른 글
[UE] 툴바 아이콘을 사용하여 뷰포트에 매쉬 배치하기 (0) | 2023.04.26 |
---|---|
[UE] Tool Bar 아이콘 만들기 (0) | 2023.04.25 |
[UE] Plugin (Button Command) (0) | 2023.04.14 |
[UE] Plugin (Save StaticMesh .csv) (0) | 2023.04.13 |
[UE] Plugin (Save StaticMesh & RenderData, LOD) (0) | 2023.04.12 |
댓글
이 글 공유하기
다른 글
-
[UE] 툴바 아이콘을 사용하여 뷰포트에 매쉬 배치하기
[UE] 툴바 아이콘을 사용하여 뷰포트에 매쉬 배치하기
2023.04.26 -
[UE] Tool Bar 아이콘 만들기
[UE] Tool Bar 아이콘 만들기
2023.04.25 -
[UE] Plugin (Button Command)
[UE] Plugin (Button Command)
2023.04.14 -
[UE] Plugin (Save StaticMesh .csv)
[UE] Plugin (Save StaticMesh .csv)
2023.04.13
댓글을 사용할 수 없습니다.