Unreal 自定义编辑器(五)

看完能得到什么?

对自定义资源的细节面板进行自定义!

我们之前创建的自定义资源实际上是自带了细节面板的,我们可以对这个面板进行自定义,旧面板如下
在这里插入图片描述
新面板如下
在这里插入图片描述

1、自定义细节面板

#pragma once

#include "CoreMinimal.h"
#include "IDetailCustomization.h"

class FSimpleAnimationAssetDetailCustomization : public IDetailCustomization
{
public:
	virtual void CustomizeDetails(IDetailLayoutBuilder& DetailBuilder) override;
private:
	FReply OnBtnClicked();
};

该类需要继承IDetailCustomization,并且重写CustomizeDetails方法,该方法记录了细节面板UI展示相关的东西

#include "Detail/SimpleAnimationAssetDetailCustomization.h"
#include "DetailLayoutBuilder.h"
#include "DetailCategoryBuilder.h"
#include "DetailWidgetRow.h"
#include "PropertyCustomizationHelpers.h"
#include "SimpleAnimationAsset.h"

void FSimpleAnimationAssetDetailCustomization::CustomizeDetails(IDetailLayoutBuilder& DetailBuilder)
{
	IDetailCategoryBuilder& DetailCategoryBuilderInstance = DetailBuilder.EditCategory(TEXT("SimpAnimCategory"));
	TSharedPtr<IPropertyHandle> SimpleAnimationAssetIntValueProperty = DetailBuilder.GetProperty(GET_MEMBER_NAME_CHECKED(USimpleAnimationAsset, IntValue));
	DetailBuilder.AddPropertyToCategory(SimpleAnimationAssetIntValueProperty);
	DetailCategoryBuilderInstance
		.AddCustomRow(FText::FromString(TEXT("SimpAnimCustomRow")))
		.WholeRowContent()
		[
			SNew(SProperty, SimpleAnimationAssetIntValueProperty)
			.ShouldDisplayName(false)
			.CustomWidget()
			[
				SNew(SHorizontalBox)
				+ SHorizontalBox::Slot()
				.VAlign(VAlign_Center)
				[
					SNew(SButton)
					.ToolTipText(FText::FromString("this is a button"))
					.OnClicked(this, &FSimpleAnimationAssetDetailCustomization::OnBtnClicked)
				]
				+ SHorizontalBox::Slot()
				.VAlign(VAlign_Center)
				.HAlign(HAlign_Right)
				.Padding(4.0f, 0.0f)
				.FillWidth(1.0f)
				[
					SNew(STextBlock)
					.Text_Lambda(
						[SimpleAnimationAssetIntValueProperty]
						{
							int32 Value;
							SimpleAnimationAssetIntValueProperty->GetValue(Value);
							return FText::FromString(FString::FromInt(Value));
						}
					)
				]
				+ SHorizontalBox::Slot()
				.Padding(0.0f, 0.0f)
				.VAlign(VAlign_Center)
				.FillWidth(1.0f)
				[
					SNew(STextBlock).Text(FText::FromString("number"))
				]
			]
		];
}

FReply FSimpleAnimationAssetDetailCustomization::OnBtnClicked()
{
	return FReply::Handled();
}

2、绑定该自定义细节面板

SimpleAnimationAssetEditorModule中添加如下几行代码,将自定义细节面板绑定,SimpleAnimationAssetEditor插件的模块类,用于控制该插件的生命周期内各个时期的函数调用等,
详细可见Unreal 自定义编辑器(四)
在这里插入图片描述
至此,我们的自定义细节面板已经完成,我们也可以对细节面板内的任意属性进行自定义,需要对要自定义的属性继承IPropertyTypeCustomization,并在SimpleAnimationAssetEditorModule中进行对应属性的绑定

#include "IPropertyTypeCustomization.h"
class FSimpleAnimationAssetStrCustomization : public IPropertyTypeCustomization
{
public:
	virtual void CustomizeHeader(
		TSharedRef<IPropertyHandle> InPropertyHandle,
		FDetailWidgetRow& HeaderRow,
		IPropertyTypeCustomizationUtils& CustomizationUtils) override;

	virtual void CustomizeChildren(
		TSharedRef<IPropertyHandle> InPropertyHandle,
		IDetailChildrenBuilder& ChildBuilder,
		IPropertyTypeCustomizationUtils& CustomizationUtils) override;

};

上述代码的具体实现没有给出,可以自行进行尝试

virtual void StartupModule() override
	{
		{
			IAssetTools& AssetTools = FModuleManager::LoadModuleChecked<FAssetToolsModule>("AssetTools").Get();
			Action = MakeShareable(new FSimpleAnimationAssetAction());
			AssetTools.RegisterAssetTypeActions(Action.ToSharedRef());
		}

		FPropertyEditorModule& PropertyEditorModule = FModuleManager::LoadModuleChecked<FPropertyEditorModule>("PropertyEditor");
		PropertyEditorModule.RegisterCustomPropertyTypeLayout("str", FOnGetPropertyTypeCustomizationInstance::CreateLambda(
			[] {return MakeShareable(new FSimpleAnimationAssetStrCustomization); }
		));
		PropertyEditorModule.RegisterCustomClassLayout("SimpleAnimationAsset", FOnGetDetailCustomizationInstance::CreateLambda(
			[] {return MakeShareable(new FSimpleAnimationAssetDetailCustomization); }
		));
		PropertyEditorModule.NotifyCustomizationModuleChanged();
	}

Unreal 自定义编辑器(一)
Unreal 自定义编辑器(二)
Unreal 自定义编辑器(三)
Unreal 自定义编辑器(四)
Unreal 自定义编辑器(五)
Unreal 自定义编辑器(六)

上述对应资源

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值