编辑器扩展:自定义属性界面

前言

编辑器扩展:自定义属性界面,

未完待续…

SObjectPropertyEntryBox

用于选择资源的界面控件

image-20210106105801136

直接上代码

  • .h
1
2
3
4
5


TSharedPtr<FAssetThumbnailPool> AssetThumbnailPool;
UObject* SelectObject;
TSharedPtr<SObjectPropertyEntryBox> EditWidgetBox;
  • cpp
1
2
3
4
void SOVR_Hud::Construct(const FArguments& InArgs)
{
AssetThumbnailPool = MakeShareable(new FAssetThumbnailPool(24));
................................
1
2
3
4
5
6
SAssignNew(EditWidgetBox,SObjectPropertyEntryBox)
.AllowedClass(UWidgetBlueprint::StaticClass())
.OnObjectChanged(this, &SOVR_Hud::OnSetObject)
.ObjectPath(this,&SOVR_Hud::GetPathName)
.OnShouldFilterAsset(this,&SOVR_Hud::ShouldFilterAsset)
.ThumbnailPool(AssetThumbnailPool)
1
2
3
4
void SOVR_Hud::OnSetObject(const FAssetData& AssetData)
{
SelectObject = AssetData.GetAsset();
}
1
2
3
4
FString SOVR_Hud::GetPathName()const
{
return SelectObject ? SelectObject->GetPathName() : TEXT("");
}
  • AllowedClass : Class类型, 这个是资源的类型
  • OnObjectChanged : 选择改变以后的代理
  • ObjectPath : 提供资源的路径名称
  • OnShouldFilterAsset : 过滤选项, 非必须
  • ThumbnailPool: Icon的对象池, 如果不设置就没有Icon

注意:

GetPathName()必须要返回真实的PathName,否则会导致界面显示还是None,如果没有正确的资源那么需要返回空或者None,否则会导致启动插件一次性卡顿并报警告

SClassPropertyEntryBox

类似的, 用于选择Class的界面控件

image-20210106110849937

1
2
3
4
5
6
7
SAssignNew(ClassBox, SClassPropertyEntryBox)
.MetaClass(AActor::StaticClass())
//.RequiredInterface(UStaticMesh::StaticClass())
.IsBlueprintBaseOnly(false)
.ShowTreeView(true)
.SelectedClass(this, &SOVR_Hud::OnGetClass)
.OnSetClass(this, &SOVR_Hud::OnSetClass)
1
2
3
4
5
6
7
8
const UClass* SOVR_Hud::OnGetClass() const
{
return SelectedClass;
}
void SOVR_Hud::OnSetClass(const UClass* SetClass)
{
SelectedClass = SetClass;
}