티스토리 뷰

Unreal/Custom Editor

[UE 5.1] Custom Icon

굥굔 2023. 9. 20. 18:31

커스텀 에디터에 커스텀 아이콘을 넣는 작업을 했다.

다음의 과정이 필요하다.

  1. 리소스 폴더에 아이콘을 넣는다.
  2. 아이콘을 등록하고 모듈을 시작.
  3. 아이콘을 사용자 메뉴에 적용.

먼저 아무것도 상속받지 않는 클래스를 제작한다.

클래스의 내부는 static으로 이루어진 함수와 변수들로 static에 대한 이해도 높일 수 있다.

#include "Styling/SlateStyle.h"

class FSuperManagerStyle
{
public:
	static void InitializeIcons();
	static void ShutDown();

private:
	static FName StyleSetName;

	static TSharedRef<FSlateStyleSet> CreateSlateStyleSet();
	static TSharedPtr<FSlateStyleSet> CreatedSlateStyleSet;

public:
	static FName GetStyleSetName() { return StyleSetName; }
};

 

정적 함수 내의 변수는 정적 변수여야 하므로 클래스 정적 변수들로 구성되어 있는것을 볼 수 있다.

 

 

디렉토리에서 아이콘을 로드하려면

#include "Interfaces/IPluginManager.h”을 참조해야한다.

IPluginManager을 사용하려면 모듈도 추가해주어야 한다.

Projects 라는 모듈을 추가해주면 된다.

 

내가 추가할 아이콘은

이 3개의 아이콘. ㅋㅋㅋㅋㅋ 전~혀 상관없는 아이콘이지만 귀여워서 사용하기로 했따.

 

아이콘을 사용하려면 사용자가 정의한 FSlateStyleSet 을 사용해야 한다.

 

TSharedRef<FSlateStyleSet> CustomStyleSet = MakeShareable(new FSlateStyleSet(StyleSetName));

	const FString IconDirectory =
		IPluginManager::Get().FindPlugin(TEXT("SuperManager"))->GetBaseDir()/"Resources";

	CustomStyleSet->SetContentRoot(IconDirectory);

	const FVector2D Icon16x16(16.f, 16.f);
	CustomStyleSet->Set(
		"ConteneBrowser.DeleteUnusedAssets",
		new FSlateImageBrush(IconDirectory / "banana.png", Icon16x16) );

위와 같은 함수를 만들고 (전부 정적 함수.) 그 내에서 사용자 정의 아이콘들을 만들어주면 된다.

아이콘을 여러개 사용하고 싶을 때는 그냥 CustomStyleSet 을 추가해주면 됨.

 

사용은 다음과 같이 한다.

MenuBuilder.AddMenuEntry(
		FText::FromString(TEXT("Delete Unused Assets")),						// Title text for menu entry
		FText::FromString(TEXT("Safty delete all unused assets under folder")),	// Tool tip text
		FSlateIcon(FSuperManagerStyle::GetStyleSetName(), "ConteneBrowser.DeleteUnusedAssets"),	// Custom icon
		// The actual funcion execute
		FExecuteAction::CreateRaw(this, &FSuperManagerModule::OnDeleteUnusedAssetButtonClicked)
	);

메뉴바에 FSlateIcon() 부분을 채워준다.

 

그렇게 완성한 아이콘은 다음과 같다.

너무 귀엽다 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

 

커스텀 아이콘을 종료할 때 스타일셋을 해제시켜주는것도 잊으면 안된다.

void FSuperManagerStyle::ShutDown()
{
	if (CreatedSlateStyleSet.IsValid())
	{
		FSlateStyleRegistry::UnRegisterSlateStyle(*CreatedSlateStyleSet);
		CreatedSlateStyleSet.Reset();
	}
}

스마트포인터를 해제하고

 

void FSuperManagerModule::ShutdownModule()
{
	FGlobalTabmanager::Get()->UnregisterNomadTabSpawner(FName("AdvancedDeletion"));
	FSuperManagerStyle::ShutDown();
}

모듈이 종료될 때 같이 호출해준다.


git->

https://github.com/InKyung-U/CustomEditor

 

GitHub - InKyung-U/CustomEditor

Contribute to InKyung-U/CustomEditor development by creating an account on GitHub.

github.com

 

'Unreal > Custom Editor' 카테고리의 다른 글

[UE 5.1] Custom Material Tool - 2  (1) 2023.10.13
[UE 5.1] Custom Material Tool - 1  (0) 2023.10.11
[UE 5.1] Custom Slate Widget 04  (0) 2023.09.19
[UE 5.1] Custom Slate Widget 03  (0) 2023.09.13
[UE 5.1] Custom Slate Widget 02  (0) 2023.09.12
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함