您声明的每个UCLASS可以在其中声明任何数量的UPROPERTY。 每个UPROPERTY都可以是可视的可编辑字段,也可以是UCLASS的某些“蓝图”可访问数据成员。
我们可以在每个UPROPERTY中添加许多限定符,这些限定符可以从UE4编辑器中更改其行为方式,例如EditAnywhere(可以从中更改UPROPERTY的屏幕)和BlueprintReadWrite(指定蓝图既可以读取也可以读取)。 除了允许使用C ++代码之外,还可以随时编写变量)。
- 准备工作
要使用此方案,您应该有一个C ++项目,可以在其中添加C ++代码。 另外,您应该已经完成了前面的方案,创建UCLASS - 派生自UObject。 - 如何做:
- 将成员添加到您的UCLASS声明中,如下所示:
UCLASS( Blueprintable ) class CHAPTER2_API UUserProfile : public UObject { GENERATED_BODY() public: UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Stats) float Armor; UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Stats) float HpMax; };
- 创建UObject类派生类的蓝图,然后通过从对象浏览器中双击在UE4编辑器中打开该蓝图。
- 现在,您可以在“蓝图”中为这些新的UPROPERTY字段的默认值指定值:
- 通过将Blueprint类的几个实例拖放到您的关卡中,然后编辑放置的对象上的值(通过双击它们)来指定每个实例的值。
- 将成员添加到您的UCLASS声明中,如下所示:
- 有什么用:
传递给UPROPERTY()宏的参数指定了一些有关变量的重要信息。 在前面的示例中,我们指定了以下内容:- EditAnywhere:这意味着可以直接从蓝图或在放置在游戏关卡中的UClass对象的每个实例上编辑UPROPERTY()宏。 将此与以下内容进行对比:
- EditDefaultsOnly:“蓝图”的值是可编辑的,但不能按实例进行编辑。
- EditInstanceOnly:这将允许在UClass对象的游戏级实例中编辑UPROPERTY()宏,而不是在基本蓝图本身上进行编辑。
- BlueprintReadWrite:这表明该属性在Blueprints图中既可读又可写。 具有BlueprintReadWrite的UPROPERTY()必须是公共成员,否则编译将失败。 将此与以下内容进行对比:
- BlueprintReadOnly:该属性必须从C ++设置,并且不能从Blueprints更改。
- Category:您应该始终为UPROPERTY()指定一个类别。 类别确定UPROPERTY()的哪个子菜单将出现在属性编辑器中。 在Category = Stats下指定的所有UPROPERTY()将出现在“蓝图”编辑器的同一Stats区域中。
- EditAnywhere:这意味着可以直接从蓝图或在放置在游戏关卡中的UClass对象的每个实例上编辑UPROPERTY()宏。 将此与以下内容进行对比:
- 另请参见:
完整的UPROPERTY列表位于https://docs.unrealengine.com/latest/INT/Programming/UnrealArchitecture/Reference/Properties/Specifiers/index.html。 浏览一下。