2.0 KiB
2.0 KiB
MakeEditWidget
- 功能描述: 使FVector和FTranform在场景编辑器里出现一个可移动的控件。
- 使用位置: UPROPERTY
- 引擎模块: Scene
- 元数据类型: bool
- 限制类型: FVector,FTranform
- 关联项: ValidateWidgetUsing
- 常用程度: ★★★
使FVector和FTranform在场景编辑器里出现一个可移动的控件。
这样相比直接的数值编辑更加的直观一些。
测试代码:
UCLASS(BlueprintType)
class INSIDER_API AMyActor_EditWidget :public AActor
{
GENERATED_BODY()
public:
UPROPERTY(EditAnywhere,BlueprintReadWrite,Category="EditWidget")
FVector MyVector;
UPROPERTY(EditAnywhere,BlueprintReadWrite,Category="EditWidget",meta=(MakeEditWidget))
FVector MyVector_MakeEditWidget;
};
测试结果:
在蓝图里继承的AMyActor_EditWidget 子类里加上另外一个FTransform变量,可以看见“Show 3D Widget”的选项,这个和MyVector_MakeEditWidget都在场景里出现了可移动的控件。
原理:
判断如果是FVector或FTransform,并且有MakeEditWidget属性,则可以创建控件。
/** Value of UPROPERTY can be edited with a widget in the editor (translation, rotation) */
static UNREALED_API const FName MD_MakeEditWidget;
/** Specifies a function used for validation of the current value of a property. The function returns a string that is empty if the value is valid, or contains an error description if the value is invalid */
static UNREALED_API const FName MD_ValidateWidgetUsing;
bool FLegacyEdModeWidgetHelper::CanCreateWidgetForStructure(const UStruct* InPropStruct)
{
return InPropStruct && (InPropStruct->GetFName() == NAME_Vector || InPropStruct->GetFName() == NAME_Transform);
}
bool FLegacyEdModeWidgetHelper::ShouldCreateWidgetForProperty(FProperty* InProp)
{
return CanCreateWidgetForProperty(InProp) && InProp->HasMetaData(MD_MakeEditWidget);
}