# EditInlineNew - **功能描述:** 指定该类的对象可以在属性细节面板里直接内联创建,要和属性的Instanced配合。 - **引擎模块:** Instance - **元数据类型:** bool - **作用机制:** 在ClassFlags中添加[CLASS_EditInlineNew](../../../../Flags/EClassFlags/CLASS_EditInlineNew.md) - **关联项:** NotEditInlineNew (NotEditInlineNew.md) - **常用程度:★★★★★** 指定该类的对象可以在属性细节面板里直接内联创建。 如果想在细节面板里直接创建对象,属性上也必须先标记Instanced或ShowInnerProperties。 EditInlineNew主要是用在UObject的子类上,一般不标EditInlineNew的是用在Actor或资产的引用上。注意EditInlineNew是表明增加从属性细节面板里直接创建对象实例的能力,而非限制只能在属性细节面板里创建,当然也可以自己手动NewObject再赋值给对象引用属性。 这个跟UPROPERTY上的Instanced能力是独立的。如果UCLASS上不加EditInlineNew,但是属性上加上Instanced,则在手动NewObject赋值该属性后,该属性也会展开内部属性来提供编辑功能。因为Instanced的属性会自动的在property上加上EditInline的meta。 此说明符会传播到所有子类;子类可通过 NotEditInlineNew 说明符覆盖它。 ## 示例代码: ```cpp UCLASS(Blueprintable, EditInlineNew) class INSIDER_API UMyClass_EditInlineNew :public UObject { GENERATED_BODY() public: UPROPERTY(EditAnywhere, BlueprintReadWrite) int32 MyProperty; }; UCLASS(Blueprintable, NotEditInlineNew) class INSIDER_API UMyClass_NotEditInlineNew :public UObject { GENERATED_BODY() public: UPROPERTY(EditAnywhere, BlueprintReadWrite) int32 MyProperty; }; UCLASS(Blueprintable, BlueprintType) class INSIDER_API UMyClass_Edit_Test :public UObject { GENERATED_BODY() public: UPROPERTY(EditAnywhere, BlueprintReadWrite, Instanced, Category = InstancedProperty) UMyClass_EditInlineNew* MyEditInlineNew; UPROPERTY(EditAnywhere, BlueprintReadWrite, Instanced, Category = InstancedProperty) UMyClass_NotEditInlineNew* MyNotEditInlineNew; UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = NormalProperty) UMyClass_EditInlineNew* MyEditInlineNew_NotInstanced; UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = NormalProperty) UMyClass_NotEditInlineNew* MyNotEditInlineNew_NotInstanced; }; ``` ## 示例效果: EditInlineNew支持直接C++或BP子类创建对象实例,然后在上面编辑实例。 而NotEditInlineNew的属性则无法找到支持的类来创建对象。 如果属性上没有Instanced则只能尝试去引用(找不到对象)。 ![image](image.png) ## 原理: 判断该类是否有CLASS_EditInlineNew来决定是否可内联创建编辑。 ```cpp template bool FPropertyEditorInlineClassFilter::IsClassAllowedHelper(TClass InClass, TIsChildOfFunction IsClassChildOf, TSharedRef< FClassViewerFilterFuncs > InFilterFuncs) { const bool bMatchesFlags = InClass->HasAnyClassFlags(CLASS_EditInlineNew) && !InClass->HasAnyClassFlags(CLASS_Hidden | CLASS_HideDropDown | CLASS_Deprecated) && (bAllowAbstract || !InClass->HasAnyClassFlags(CLASS_Abstract)); } ```