초보 코린이의 성장 일지
UE4 Button Command 본문
1. 평범한 기능들이 있는 이 공간안에 Command를 생성해서 넣어 줄 것이다.
#pragma once
#include "CoreMinimal.h"
#include "Framework/Commands/Commands.h"
class EXAMPLE_API FButtonCommand
: public TCommands<FButtonCommand> // 부모의 공용 영역
{
public:
void RegisterCommands() override;
private:
// 델리게이션을 위한 함수
void OnClicked_LoadMesh();
};
#include "ButtonCommand.h"
void FButtonCommand::RegisterCommands() // 추상 클래스이므로, 부모 호출 x
{
// UI커멘드 매크로, 무조건 정의되어있는 방법으로 사용해야한다.
#define LOCTEXT_NAMESPACE ""
// "LoadMesh"은 명령에 이름, ""은 설명부분, 이 명령이 어떤것에 연결될 것인가 버튼으로 ;설정.
// 단축기를 만들고 싶으면 FInputChord 안에 Key 선언해주면 된다.
UI_COMMAND(LoadMesh, "LoadMesh", "", EUserInterfaceActionType::Button, FInputChord());
#undef LOCTEXT_NAMESPACE // 끝냈다는 의미
// 연결시켜주기, 델리게이션 FExecuteAction을 보면 매개변수가 따로 없으므로, 빈함수를 생성해서 단지 채워주기위해 넣어준다.
Command->MapAction(LoadMesh, FExecuteAction::CreateRaw(this, &FButtonCommand::OnClicked_LoadMesh));
}
void FButtonCommand::OnClicked_LoadMesh()
{
// 비어있는 함수용이지만 로그 출력겸 선언.
GLog->Log("OnClick");
}
1. 커멘드 버튼을 만들어주기 위한 작업.
2. 델리게이션 이벤트를 사용해서 연결해준다.
이제 툴바를 커스텀마이징을 해줘야한다.
using UnrealBuildTool;
public class Example : ModuleRules
{
public Example(ReadOnlyTargetRules Target) : base(Target)
{
PCHUsage = ModuleRules.PCHUsageMode.UseExplicitOrSharedPCHs;
// 모듈 디렉토리를 추가해준다.
PublicIncludePaths.Add(ModuleDirectory);
// 외부에서 항상 접근하므로, Core는 열어준다.
PublicDependencyModuleNames.Add("Core");
// U2212_05, 안에 모듈들 불러오기
PrivateDependencyModuleNames.Add("U2212_05");
// 외부에서 알 수 없어야 하므로, 숨겨준다.
PrivateDependencyModuleNames.Add("CoreUObject");
PrivateDependencyModuleNames.Add("Engine");
PrivateDependencyModuleNames.Add("Slate");
PrivateDependencyModuleNames.Add("SlateCore");
PrivateDependencyModuleNames.Add("GameplayDebugger");
PrivateDependencyModuleNames.Add("DesktopPlatform");
PrivateDependencyModuleNames.Add("MainFrame");
PrivateDependencyModuleNames.Add("EditorStyle");
}
}
1. 우선 Build.cs로 가서 "EditorStyle"를 추가해준다.
1. 편집 -> 에디터 개인설정 -> 기타 -> 포인트 디스플레이 체크해주기.
2. 명령을 주기위해서는 메시지를 알아야 하므로 디스플레이를 켜줘서 확인해야한다.
3. 이제 각 카테고리가 어떠한 부분에 들어가있는지 확인할 수 있다.
#pragma once
#include "CoreMinimal.h"
#include "Modules/ModuleManager.h"
class FExampleModule : public IModuleInterface
{
public:
virtual void StartupModule() override;
private:
// 버튼을 추가해주는 역할을 수행, 델리게이션을 타고들어가 매개변수 받아오기.
void AddToolBar(class FToolBarBuilder& InBuilder);
};
#include "ExampleModule.h"
#include "ExampleDubuggerCategory.h"
#include "ExampleConsoleCommand.h"
#include "StaticMesh_Detail.h"
#include "ButtonCommand.h"
#include "CStaticMesh.h"
#include "GameplayDebugger.h" // 언리얼 헤더
#include "LevelEditor.h"
#define LOCTEXT_NAMESPACE "FExampleModule"
IMPLEMENT_MODULE(FExampleModule, Example)
void FExampleModule::StartupModule()
{
// ToolBar
{
// Register로 커멘드 등록시키기 (자동으로 등록됨)
FButtonCommand::Register();
Extender = MakeShareable(new FExtender());
// 델리게이션으로 매개변수 하나가 들어간다.
FToolBarExtensionDelegate toolBar;
// 툴바에 이벤트 연결.
toolBar.BindRaw(this, &FExampleModule::AddToolBar);
// Before로 내가 넣어주고 싶은 부분에서 그 전 지점을 기준으로 잡는다는 의미, 싱글톤으로 되어있는 커멘드를 넣어준다.
Extender->AddToolBarExtension("Compile", EExtensionHook::Before, FButtonCommand::Get().Command, toolBar);
// 위에 작업으로 생성된 툴바를 에디터에 등록해줘야한다, 창 하나하나가 모듈이기 때문에 Level에 있는 모듈을 하나 불러오기.
FLevelEditorModule& levelEditor = FModuleManager::LoadModuleChecked<FLevelEditorModule>("LevelEditor");
levelEditor.GetToolBarExtensibilityManager()->AddExtender(Extender); // Extender 추가
}
}
void FExampleModule::AddToolBar(FToolBarBuilder& InBuilder)
{
// InBuilder는 툴바를 관할해준다.
InBuilder.AddSeparator(); // 구분선을 나타낸다.
InBuilder.AddToolBarButton // 툴바 버튼 추가
(
FButtonCommand::Get().LoadMesh, // 명령 객체
"LoadMesh",
FText::FromString("LoadMesh"),
FText::FromString("Load Mesh Data")
);
}
#undef LOCTEXT_NAMESPACE
1. 델리게이션 이벤를 통해 툴바를 연결.
2. 생성된 툴바를 에디터에 등록시켜준다.
3. 버튼을 추가해줘서 확인할 수 있도록 만들어준다.
1. 아까에 카테고리가 보이도록한 설정은 꺼주었다. 이름을 알아냈기 때문.
2. 만들어준 버튼을 클릭할때마다 지정해준 Log가 출력되는걸 볼 수 있다.
한글 인코딩을 사용하려고해도 언리얼에서는 국제 인코딩을 사용한다. 하지만 굳이 써보기 위해 작업을 진행해보겠다.
1. 우선 한글을 사용하려고 하는 부분에 cpp를 클릭한다.
2. 파일 -> 다른 이름으로 저장을 눌러준다.
3. 저장 옆에 버튼을 눌러 인코딩하여 저장을 눌러주고 -> 예를 클릭해준다.
4. 유니코드 UTF-8로 설정하면 한국어로 설정이 완료된다. 이제 컴파일을 하고 실행해본다.
5. 원래 이름입력을 하던 코드에 name로 다시 바꿔주어 내가 설정한 한글 이름이 들어가도록 된다.
6. 한글로 잘 등록되어있는걸 확인할 수 있다.
https://www.youtube.com/watch?v=SzC31bOJ5YA
'언리얼' 카테고리의 다른 글
UE4 Tool Bar, Player (0) | 2023.04.26 |
---|---|
UE4 Button Command, Icon (0) | 2023.04.25 |
UE4 Save StaticMesh (0) | 2023.04.13 |
UE4 StaticMesh (0) | 2023.04.12 |
UE4 StaticMesh (0) | 2023.04.11 |