Slate Tip

3 분 소요

Style 찾기

SAssignNew(ComboButton, SComboButton)
.ButtonStyle( FEditorStyle::Get(), "PropertyEditor.AssetComboStyle" )
.ForegroundColor(FEditorStyle::GetColor("PropertyEditor.AssetName.ColorAndOpacity"))

위와 같은 Style 은 구글링해도 안나오고 다음과 같은 방법을 통해 찾아야한다.

  1. Window -> DeveloperTools -> Widget Reflector 를 켠다.
  2. Pick Hit-Testable Widgets 을 통해 원하는 스타일을 가진 위젯에 커서를 옮기고 Esc 를 누른다.
  3. WidgetName 이 Tree 에 밀리면 Filter 를 통해 적당한 곳을 Root 로 만들자.
  4. 의심되는 위젯에 대해서 옆에 Source Column 을 통해서 원하는 코드 위치로 갈 수 있다.
  5. 여기서 원하는 스타일을 찾아 긁어온다.

Asset Picker

TSharedRef<SWidget> SAssetPicker::OnGenerateAssetPicker()
{
	FContentBrowserModule& ContentBrowserModule = FModuleManager::Get().LoadModuleChecked<FContentBrowserModule>(TEXT("ContentBrowser"));
	
	FAssetPickerConfig AssetPickerConfig;
	
	TArray<const UClass*> AllowedClasses = {...};
	for(TArray<const UClass*>::TConstIterator iter = AllowedClasses.CreateConstIterator(); iter; ++iter)
		AssetPickerConfig.Filter.ClassNames.Add((*iter)->GetFName());
		
	AssetPickerConfig.OnAssetSelected = FOnAssetSelected::CreateSP(this, ...);
	AssetPickerConfig.bAllowDragging = true;
	AssetPickerConfig.bAllowNullSelection = true;
	AssetPickerConfig.Filter.bRecursiveClasses = true;
	AssetPickerConfig.InitialAssetViewType = EAssetViewType::List;
	AssetPickerConfig.InitialAssetSelection = InitialAsset;
	
	return SNew(SBox).WidthOverride(AssetPickerSize.X).HeightOverride(AssetPickerSize.Y)
	       		[
	       			SNew(SBorder).BorderImage(FEditorStyle::GetBrush("Menu.Background"))
	       			[
	       				ContentBrowserModule.Get().CreateAssetPicker(AssetPickerConfig)
	       			]
	       		];
}

버튼에 대한 예제

위처럼 ContentBrowserModule 에서 Asset Picker 를 들고 올 수 있음.

UE4 는 ComboButtonOnGetMenuContent 를 위와 비슷한 함수를 연결시켜줌.

이때 주의사항은 처음에 알아서 원하는 어셋에 대해 초기화(및 OnAssetSelected)를 안해주므로 직접 해줘야함.

댓글남기기