UPROPERTY 修饰符

UPROPERTY 修饰符,我们之前已经接触过,但当时大部都是使用 EditAnywhere 这个选项。在这篇文章中,我们讲解更多可选择的选项。

在代码清单 1 中,我们写了几个不同修饰符的变量进行演示查看。

代码清单 1 选项
  1.     UPROPERTY(VisibleAnywhere, BlueprintReadWrite)
  2.     int32 VisibleAnywhereInt = 12;
  3.  
  4.     UPROPERTY(EditAnywhere, BlueprintReadOnly)
  5.     int32 EditAnywhereInt = 12;
  6.  
  7.     UPROPERTY(VisibleInstanceOnly)
  8.     int32 VisibleInstanceOnlyInt = 12;
  9.  
  10.     UPROPERTY(VisibleDefaultsOnly)
  11.     int32 VisibleDefaultsOnlyInt = 12;
  12.  
  13.     UPROPERTY(EditDefaultsOnly)
  14.     int32 EditDefaultsOnlyInt = 12;
  15.  
  16.     UPROPERTY(EditInstanceOnly)
  17.     int32 EditInstanceOnlyInt = 12;

我们先看属性修饰符,有如下选项。虽然选项比较多,但是分开来看很容易理解。Visible 打头的代表变量是可见的,但不可编辑;Edit 打头的代表变量是可编辑的。包含 Defaults 的,表示作用于蓝图内;包含 Instance 的,代表作用于实例。

属性修饰符 类默认值 实例对象 是否可编辑
VisibleAnywhere ✅ 可见 ✅ 可见 ❌ 不可编辑
EditAnywhere ✅ 可见 ✅ 可见 ✅ 可编辑
VisibleDefaultsOnly ✅ 可见 ❌ 不可见 ❌ 不可编辑
EditDefaultsOnly ✅ 可见 ❌ 不可见 ✅ 可编辑
VisibleInstanceOnly ❌ 不可见 ✅ 可见 ❌ 不可编辑
EditInstanceOnly ❌ 不可见 ✅ 可见 ✅ 可编辑

Defaults 和 Instance 的概念我们第一次接触,有点类似类和实例的概念。举一个例子说明更加清楚,图 1 是蓝图界面,可以查看修改类默认值,对应 Defaults;图 2 是把蓝图拖拽到视口里生成的实例,可以在细节窗口查看修改变量,对应 Instance。

比如在图 1 中,我们只能看到包含 Defaults 的变量,而看不到包含 Instance 的变量;同样,在图 2 中,我们只能看到包含 Instance 的变量,而看不到包含 Defaults 的变量。

图1 Defaults
图2 Instance

接着我们看蓝图可见性修饰符,我们之前接触过。它可以把 C++ 变量暴露在蓝图事件图表中。BlueprintReadOnly 表示在蓝图事件图表中只读;BlueprintReadWrite 表示在蓝图事件图表中可读可写。

Blueprint 修饰符 蓝图中可 Get 蓝图中可 Set
BlueprintReadOnly
BlueprintReadWrite