초보 코린이의 성장 일지

UE4 Button Command 본문

언리얼

UE4 Button Command

코오린이 2023. 4. 24. 16:43

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
Comments