跳至主要內容

F22.Blueprintable| BlueprintType傻傻分不清

Mr.Si大约 2 分钟u++

导言

头像
Dady!Blueprintable和BlueprintType 啥区别啊?
头像
是不是脑子胀痛,感觉要长脑子了?
头像
还有还有 ,如果是写在配置里的结构体要不要标记Blueprintable?BlueprintType ?

Blueprintable vs BlueprintType 对比

特性BlueprintableBlueprintType
适用对象UCLASSUCLASSUSTRUCT
主要作用允许蓝图继承 C++ 类允许在蓝图中作为变量、参数、返回值
是否允许创建蓝图子类✅ 是❌ 否(除非同时是 Blueprintable
蓝图中作为数据使用✅ 如果同时是 BlueprintType✅ 是
常用场景AActorUComponentUGameplayAbility 等需要蓝图扩展数据结构、配置类、传输数据用的对象
常用组合UCLASS(Blueprintable, BlueprintType)USTRUCT(BlueprintType)
头像

咱先做个试验,一些类在UCLASS中写上BlueprintableBlueprintType,一些只写一个或不写。

标记了BlueprintableBlueprintType不仅可以创建蓝图派生类,而且还能再蓝图中作为变量、参数、返回值

头像
没有Blueprintable,蓝图创建列表中都无法创建,意味着无法用蓝图继承派生C++类。
头像
只写了Blueprintable没有BlueprintType的,无法变成变量使用。
头像
也就是说我必须带上这个BlueprintType才能在蓝图中当变量使用?
头像

是的,不过也有例外,例如你继承了UDeveloperSettingsBackedByCVars 这种设置类时,即便结构体不标记 BlueprintType 依然可以在设置中配置。

头像
但我在蓝图中确实查无此人
头像
是的,这样也可以避免一些配置用的结构体被蓝图滥用