【转】Blueprintable\NotBlueprintType与EditAnywhere\EditDefaultsOnly\EditInstanceOnly

448 阅读1分钟

原文链接

Bluprintable\NotBlueprintType

创建基于 UE4 父类的代码

UCLASS()
class VR_API ALoadStreamingLevelActor : public AActor
{
	GENERATED_BODY()
	
public:	
	// Sets default values for this actor's properties
	ALoadStreamingLevelActor();
 
	// Called when the game starts or when spawned
	virtual void BeginPlay() override;
	
	// Called every frame
	virtual void Tick( float DeltaSeconds ) override;
 
	UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = LoadedLevelName)
		FName LevelName;
	
	UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = LoadedLevelName)
		FName PackageName;
};

默认情况下上边的 UCLASS() 宏同下图中 UCLASS(Blueprintable)的作用是一样的。这样声明的类在 UE4 中是可以创建基于此类的蓝图子类

image.png

如果不想让 C++ 类能创建蓝图子类,则只需把 Blueprintable 替换为NotBlueprintable。修改代码如下

UCLASS(NotBlueprintable)
class VR_API ALoadStreamingLevelActor : public AActor
{
	GENERATED_BODY()
	
public:	
	// Sets default values for this actor's properties
	ALoadStreamingLevelActor();
 
	// Called when the game starts or when spawned
	virtual void BeginPlay() override;
	
	// Called every frame
	virtual void Tick( float DeltaSeconds ) override;
 
	UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = LoadedLevelName)
		FName LevelName;
	
	UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = LoadedLevelName)
		FName PackageName;
};

修改编译完后,在 UE4 中就无法创建基于此 C++ 的蓝图子类

image.png

UCLASS() 宏参数中还有一个名为 NotBlueprintType 的宏,这个宏的意思是在蓝图中无法创建基于 此 C++ 类变量。而基于此 C++ 类的 蓝图子类不受此限制

代码和效果如下

UCLASS(Blueprintable, NotBlueprintType)
class VR_API ALoadStreamingLevelActor : public AActor
{
	GENERATED_BODY()
	
public:	
	// Sets default values for this actor's properties
	ALoadStreamingLevelActor();
 
	// Called when the game starts or when spawned
	virtual void BeginPlay() override;
	
	// Called every frame
	virtual void Tick( float DeltaSeconds ) override;
 
	UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = LoadedLevelName)
		FName LevelName;
	
	UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = LoadedLevelName)
		FName PackageName;
};

此时 ALoadStreamingLevel 类是搜索不到的

image.png

EditAnywhere\EditDefaultsOnly\EditInstanceOnly

  • EditAnyWhere: 此成员变量在蓝图编辑器中和关卡细节面板中都会被暴露出来
  • EditDefaultsOnly: 此成员变量只会在蓝图编辑器中被暴露出来
  • EditInstanceOnly: 此成员变量只会在关卡细节面板中被暴露出来

蓝图编辑器中:

image.png

拖拽到 Level 中:

image.png

相关文章

【转载】BlueprintCallable 与 BlueprintPure

【转载】BlueprintImplementableEvent 与 BlueprintNativeEvent