标题
在虚幻4定义的C++类中,可以定义一些数据和函数,这些数据和函数通常不仅仅是在C++类中访问,也要给蓝图类或者在场景中具体的对象实例中通过编辑细节面板修改,这时候往往需要在相关的UPROPERTY宏内添加上控制访问权限的参数
准备知识什么是蓝图类,什么是实例化对象:把准备好的蓝图类拖拽到场景当中时,表示实例化了一个对象
在蓝图脚本里面访问权限修饰
UCLASS(Blueprintable) // UCLASS()表示参加反射系统,参数Blueprintable表示蓝图可以访问
class TESTCJIAJIA_API UMyObject : public UObject
{
GENERATED_BODY()
public:
UMyObject();
// 普通数据类型Blueprint表示蓝图,然后Read表示可读,Write表示可写,根据需求可以彭凑,所以MyFloat在蓝图脚本中可读可写
UPROPERTY(BlueprintReadWrite)
float MyFloat;
// 函数的宏是UFUNCTION,和普通数据类型一样,前面的Blueprint表示蓝图后面的Callable表示可以被调用,所以MyFunction()在蓝图脚本中可以被调用
UFUNCTION(BlueprintCallable)
void MyFunction();
};
在蓝图类细节面板中访问权限修饰
// Defaults表示缺省参数,就是蓝图类中默认的数据,所以表示该属性只能在蓝图类当中编辑,实例化对象之后该属性不可以编辑
UPROPERTY(EditDefaultsOnly, Category = "My Actor Properties | Vector")
bool bGotoInitLocation;
// 那由上面的这些关键字可以拼凑出下面这个修饰语句的意思,那就是只能在蓝图类当中可见,实例化对象就不可见了
UPROPERTY(VisibleDefaultsOnly, Category = "My Actor Properties | Vector")
FVector WorldOrigin;
在实例化对象细节面板中访问权限修饰
// 这个一个向量类型,属于数据类型,需要在对象实例中编辑,Edit表示可编辑,InstanceOnly表示仅仅可以在实例对象中,所以意思就是只可以在对象实例中编辑,所以这个属性不能在蓝图类中编辑
UPROPERTY(EditInstanceOnly, Category = "My Actor Properties | Vector")
FVector InitLocation;
// Visible表示可见,那么意思就是只可以在对象实例中可见
UPROPERTY(VisibleInstanceOnly, Category = "My Actor Properties | Vector")
FVector PlacedLocation;
在蓝图类和实例化对象中都可以编辑
// 这里是静态网格体指针类型,它属于一个组件类型,可以通过编辑器直接搜索资源选定,所以设置为任何位置可见就行,Visible表示可见,Anywhere表示任何地方
UPROPERTY(VisibleAnywhere, Category = "My Actor Components")
UStaticMeshComponent* MyStaticMesh;
// 下面Anywhere表示在任意地方,所以这个属性表示在任意地方都可以编辑
UPROPERTY(EditAnywhere, Category = "My Actor Properties | Vector")
FVector TickLocationOffset;
分组
可以看到除了访问权修饰符,后面还有一些参数, Category表示分组,分组之后,该属性就可以在细节栏,添加一个为"My Actor Properties",这时候使用快速查找功能,可以更快的定义到想编辑的属性而后面的 | Vector表示二级分组,就是分组之下还有一个分组
// 分组
UPROPERTY(EditInstanceOnly, Category = "My Actor Properties | Vector")
FVector InitLocation;