UE4 UPROPERTY EditAnywhere,VisibleAnywhere,BlueprintReadWrite,BlueprintReadOnly的区别
UE4 UPROPERTY EditAnywhere,VisibleAnywhere,BlueprintReadWrite,BlueprintReadOnly的区别
UE的文档中提到了让C++编写的变量在Blueprint中可见的方法,就是利用UPROPERTY对变量进行修饰。我在这里更详细的解释一下它们四个变量的区别。
首先明确,EditAnywhere和VisibleAnywhere 是一组,控制的是一个东西,BlueprintReadWrite和BlueprintReadOnly是另一组,这两组之间没有关系。不会产生组合影响。
EditAnywhere与VisibleAnywhere
代码:
UPROPERTY(EditAnywhere, Category = "Damage")
int32 TotalDamage;
使用EditAnywhere修饰类变量,把类拖动到WorldEditor里之后,对象的Detail面板可编辑被修饰的变量。
而VisibleAnywhere只是让变量可见,编辑框是灰色,不能修改变量的值。
UPROPERTY(VisibleAnywhere, Category = "Damage")
int32 TotalDamage;
BlueprintReadOnly与BlueprintReadWrite
BlueprintReadOnly和BlueprintReadWrite是一组。明明是C++的class,和BP(Bluprint)有什么关系呢?
这里指的是,用BP方式创建子类,以C++代码编写父类。创建一个BPclass,从目前编写的C++ class继承,然后在子类的BP Editor里,就可以获取这个值,如果不写BlueprintReadOnly或者BlueprintReadWrite,是不能在蓝图里看到这个变量的。
首先创建一个叫MyActor的C++类,然后创建一个叫做BPMyActor的class,以MyActor为父类。
父类中定义一个变量,被BlueprintReadOnly修饰
UPROPERTY(BlueprintReadOnly, Category = "Damage")
int32 TotalDamage
那么在子类的蓝图编辑器主界面,点右键然后搜索,就会出现Get操作。
而如果用BlueprintReadWrite修饰变量,则既会出现Get,又会出现Set操作。
如果不提供任何一个,则父类中定义的这个变量,完全无法在BP继承出来的子类中访问到。
UPROPERTY()
int32 TotalDamage;
下一篇: 一个用SESSION做的图形计数器