티스토리 뷰

Slate 란 무엇인가?

언리얼은 슬레이트를 사용하여 구축되어있다. 에디터 상의 모든 버튼/창 들이 전부 슬레이트 위젯이다. 슬레이트 위젯을 사용하면 원하는 편집기 인터페이스를 새롭게 만들 수 있다.

 

슬레이트 사용이 복잡한 이유는 3가지가 있다.

  1. 슬레이트는 고유한 구문이 존재함.. 일반 코드와는 많이 다르다.
  2. 슬레이트는 시각화 하기가 어렵기 때문에 어렵게 느껴진다. 글자 사이의 간격이나 이런것들을 코드로 쳐야하기 때문.
  3. 다른 모듈과의 의사소통. 월드 아웃라이너의 오브젝트를 클릭했을 때 레벨에서도 선택되는 행동이 모듈과의 의사소통. 가장 어려운 부분이다.

모듈과의 의사소통이 슬레이트의 가장 어려운 부분이라고 볼 수 있는데 모듈과의 의사소통을 위해서는 언리얼의 스마트 포인터에 의존해야 한다.

 

언리얼의 스마트 포인터에 대한 자세한 내용은 다음 포스팅에서 진행하도록 하겠다.


본격적으로 Custom Slate Widget을 만든다.

언리얼 상에서 새로운 창을 띄우기 위해서는 

DECLARE_DELEGATE_RetVal_OneParam( TSharedRef<SDockTab>, FOnSpawnTab, const FSpawnTabArgs& );

라는 델리게이트를 사용해야 한다.

 

위의 델리게이트는 다음과 같이 사용된다.

void FSuperManagerModule::RegisterAdvancedDeletionTab()
{
	FGlobalTabmanager::Get()->RegisterNomadTabSpawner(FName("AdvancedDeletion"),
		FOnSpawnTab::CreateRaw(this, &FSuperManagerModule::OnSpawnAdvancedDeletionTab))
		.SetDisplayName(FText::FromString(TEXT("AdvancedDeletion")));
}

TSharedRef<SDockTab> FSuperManagerModule::OnSpawnAdvancedDeletionTab(const FSpawnTabArgs& SpawnTabArgs)
{
	return SNew(SDockTab).TabRole(ETabRole::NomadTab)
		[
			SNew(SAdvanceDeletionTab)
			.AssetsDataArray(GetAllAssetDataUnderSelectedFolder())
		];
}

이렇게 하면 AdvancedDeletion라는 이름을 갖는 새로운 창을 생성할 수 있다.

새로운 창은 SNew 매크로를 사용하여 만든다. 새롭게 만든 창을 가르키는 스마트 포인터를 리턴하면서 [] 괄호 내부에 창에 들어갈 내용 또한 전달할 수 있다.

 

언리얼의 창은 언리얼이 실행될 때 생성되고 비활성화 된다. 그렇게 만들어진 창은

FGlobalTabmanager::Get()->TryInvokeTab(FName("AdvancedDeletion"));

이름을 통해서 띄울 수 있다.

이름을 통해 호출된 새로운 창.

창 내부에는 아무것도 없다. 내부의 내용 또한 직접 만들어야 한다.

아무것도 상속받지 않는 새로운 C++ 클래스를 런타임이 아닌 에디터 모듈으로 제작한다.

 

슬레이트 위젯의 코드 형식은 우리가 기존에 알고있던 C++ 타입과는 완전히 다르다.

아래는 슬레이트 코드의 형식이다.

	ChildSlot
	[	// Main Vertical Box
		SNew(SVerticalBox)

		// First vertical slot for title text
		+ SVerticalBox::Slot()
		.AutoHeight()
		[
			SNew(STextBlock)
			.Text(FText::FromString(TEXT("Advance Deletion")))
			.Font(TitleTextFont)
			.Justification(ETextJustify::Center)
			.ColorAndOpacity(FColor::White)
		]
	];

이런 형식을 가진 새로운 에디터의 창은 아래의 모습과 같다.

 

슬레이트 위젯 코드에서는 에디터 상에서 블루프린트로 제작할 수 있는 여러가지 옵션들을 전부 컨트롤할 수 있다. 폰트, 폰트사이즈, 색깔, 위치 등 조정이 가능한 것이다. 다만 코드로 슬레이트 위젯을 제작하게 되면 실시간으로 위젯의 모습을 확인할 수 없는점이 단점이 될 것이다.


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

 

GitHub - InKyung-U/CustomEditor

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

github.com

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/04   »
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
글 보관함