在Unreal Engine中,`UPROPERTY`宏是一个强大的工具,用于管理和操控C++属性的行为。`UPROPERTY`的特性极为丰富,通过它你可以让属性可见,可以被编辑,控制垃圾回收,网络复制,序列化等等。
只能操作[[../UE概念/UObject]]的子类
以下是对`UPROPERTY`宏常用参数的更为系统的解释:
1. 可见性与可编辑性:
- `VisibleDefaultsOnly`:属性在默认属性面板中可见,但仅在对象刚被构造时可编辑。
- `VisibleAnywhere`:属性在属性面板中可见,但不能编辑。
- `EditDefaultsOnly`:属性在默认属性面板中可见,并且可编辑。
- `EditAnywhere`:属性在所有地方都可见,并且可编辑。
2. 蓝图可见性:
- `BlueprintReadOnly`:属性对蓝图可见,但是只读。
- `BlueprintReadWrite`:属性对蓝图可见,并且可以读写。
3. 其他:
- `Category`:用于在属性面板中将属性分类。你可以为这个参数赋值一个字符串,表示该属性在面板中的分类。
- `Transient`:该属性不会被保存或加载,常用于临时变量。
- `Config`:该属性会被保存到配置文件中。可以通过游戏的设置菜单进行修改。
4. 网络复制:
- `Replicated`:该属性需要在网络游戏中进行复制。你需要在你的类中实现`GetLifetimeReplicatedProps`函数来使得这个属性可以复制。
- `ReplicatedUsing`:当这个属性在客户端上被复制时,将会调用指定的函数。
5. 引用与垃圾回收:
- `UPROPERTY`宏本身即告知UE4垃圾回收系统,此属性需要被考虑。因此,如果你的属性是一个UObject的指针,即使没有其他对象引用它,只要有一个`UPROPERTY`引用它,就不会被垃圾回收。
每个`UPROPERTY`标签都可以有多个参数,它们由逗号分隔。例如:
```cpp
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category="Health")
float Health;
```
这个示例中的Health属性在编辑器中可见,但在蓝图中只读,它被分类在"Health"类别中。
# 具体示例
`UPROPERTY`是Unreal Engine中的一个宏,它允许你控制Unreal Engine的序列化系统,编辑器行为,垃圖表系统等如何与类的属性进行交互。这个宏的使用非常重要,特别是当你希望创建可以在Unreal Editor中编辑的类或结构时。
以下是一些基本的`UPROPERTY`标志及其使用:
1. `EditAnywhere`:允许在编辑器的任何地方修改属性。这在创建可以配置的组件或游戏对象时非常有用。
```cpp
UPROPERTY(EditAnywhere, Category = "Configuration")
float MaxSpeed;
```
2. `BlueprintReadWrite`:允许在蓝图中读写属性。如果你想在蓝图逻辑中使用这个属性,那么就应该使用这个标志。
```cpp
UPROPERTY(BlueprintReadWrite, Category = "Configuration")
float MaxSpeed;
```
3. `VisibleAnywhere`:在编辑器中任何地方都可以看到这个属性,但不能修改。这对于显示游戏状态或其他只读信息很有用。
```cpp
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Status")
float CurrentSpeed;
```
4. ` BlueprintReadOnly`:允许蓝图获取(但不能设置)属性的值。这是`VisibleAnywhere`的蓝图等价项。
```cpp
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Status")
float CurrentSpeed;
```
5. `Transient`:此属性不会被序列化,每次加载对象时,该属性的值都会被重置。
```cpp
UPROPERTY(Transient)
float TemporaryValue;
```
6. `Replicated`:在网络游戏中,此属性会被复制到所有连接的客户端。
```cpp
UPROPERTY(Replicated)
float SharedValue;
```
注意:这些标志可以组合在一起使用,例如:
```cpp
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Configuration")
float MaxSpeed;
```
希望以上内容能帮助你更好地理解并使用UE中的`UPROPERTY`宏。