欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

UE4 UPROPERTY EditAnywhere,VisibleAnywhere,BlueprintReadWrite,BlueprintReadOnly的区别

程序员文章站 2022-06-04 23:42:34
...

UE4 UPROPERTY EditAnywhere,VisibleAnywhere,BlueprintReadWrite,BlueprintReadOnly的区别

UE的文档中提到了让C++编写的变量在Blueprint中可见的方法,就是利用UPROPERTY对变量进行修饰。我在这里更详细的解释一下它们四个变量的区别。

首先明确,EditAnywhere和VisibleAnywhere 是一组,控制的是一个东西,BlueprintReadWrite和BlueprintReadOnly是另一组,这两组之间没有关系。不会产生组合影响。

EditAnywhere与VisibleAnywhere

代码:

  UPROPERTY(EditAnywhere, Category = "Damage")
  int32 TotalDamage;

UE4 UPROPERTY EditAnywhere,VisibleAnywhere,BlueprintReadWrite,BlueprintReadOnly的区别
使用EditAnywhere修饰类变量,把类拖动到WorldEditor里之后,对象的Detail面板可编辑被修饰的变量。

而VisibleAnywhere只是让变量可见,编辑框是灰色,不能修改变量的值。

  UPROPERTY(VisibleAnywhere, Category = "Damage")
  int32 TotalDamage;

UE4 UPROPERTY EditAnywhere,VisibleAnywhere,BlueprintReadWrite,BlueprintReadOnly的区别

BlueprintReadOnly与BlueprintReadWrite

BlueprintReadOnly和BlueprintReadWrite是一组。明明是C++的class,和BP(Bluprint)有什么关系呢?
这里指的是,用BP方式创建子类,以C++代码编写父类。创建一个BPclass,从目前编写的C++ class继承,然后在子类的BP Editor里,就可以获取这个值,如果不写BlueprintReadOnly或者BlueprintReadWrite,是不能在蓝图里看到这个变量的。

首先创建一个叫MyActor的C++类,然后创建一个叫做BPMyActor的class,以MyActor为父类。
UE4 UPROPERTY EditAnywhere,VisibleAnywhere,BlueprintReadWrite,BlueprintReadOnly的区别
父类中定义一个变量,被BlueprintReadOnly修饰

  UPROPERTY(BlueprintReadOnly, Category = "Damage")
  int32 TotalDamage

那么在子类的蓝图编辑器主界面,点右键然后搜索,就会出现Get操作。

UE4 UPROPERTY EditAnywhere,VisibleAnywhere,BlueprintReadWrite,BlueprintReadOnly的区别
而如果用BlueprintReadWrite修饰变量,则既会出现Get,又会出现Set操作。
UE4 UPROPERTY EditAnywhere,VisibleAnywhere,BlueprintReadWrite,BlueprintReadOnly的区别
如果不提供任何一个,则父类中定义的这个变量,完全无法在BP继承出来的子类中访问到。

  UPROPERTY()
  int32 TotalDamage;

UE4 UPROPERTY EditAnywhere,VisibleAnywhere,BlueprintReadWrite,BlueprintReadOnly的区别