在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`宏。