Unreal Engine 中的 UFUNCTION
和 UPROPERTY
宏是在C++代码中定义函数和属性时经常使用的关键宏。它们允许开发者添加各种属性和元数据,以便更好地控制函数和属性在引擎中的行为。这里简单介绍一下这两个宏的主要属性和用法。
1. UFUNCTION 宏
1.1 BlueprintCallable
UFUNCTION(BlueprintCallable, Category = "MyCategory")
void MyFunction();
允许在蓝图中调用该函数。
1.2 BlueprintPure
UFUNCTION(BlueprintPure, Category = "MyCategory")
int32 GetMyValue() const;
标记该函数是一个纯粹的函数,即它不修改对象的状态。
1.3 BlueprintImplementableEvent
UFUNCTION(BlueprintImplementableEvent, Category = "MyCategory")
void MyEvent();
允许在蓝图中实现该事件的自定义行为。
1.4 BlueprintNativeEvent
UFUNCTION(BlueprintNativeEvent, Category = "MyCategory")
void MyNativeEvent();
virtual void MyNativeEvent_Implementation();
定义一个原生的蓝图事件,但是可以在C++中提供默认实现。
1.5 Server、Client、NetMulticast
UFUNCTION(Server, Reliable, WithValidation)
void MyServerFunction();
UFUNCTION(Client, Reliable)
void MyClientFunction();
UFUNCTION(NetMulticast, Reliable)
void MyMulticastFunction();
用于标记在服务器、客户端或所有客户端上执行的函数。
1.6 Reliable、Unreliable
UFUNCTION(Reliable, Server, WithValidation)
void MyReliableServerFunction();
UFUNCTION(Unreliable, Client)
void MyUnreliableClientFunction();
在网络环境中,表示函数调用是可靠或不可靠的。
2. UPROPERTY 宏
2.1 BlueprintReadWrite
UPROPERTY(BlueprintReadWrite, Category = "MyCategory")
int32 MyProperty;
允许蓝图读写该属性。
2.2 EditAnywhere
UPROPERTY(EditAnywhere, Category = "MyCategory")
float MyFloatProperty;
允许在编辑器中任何地方编辑该属性。
2.3 VisibleAnywhere
UPROPERTY(VisibleAnywhere, Category = "MyCategory")
FVector MyVectorProperty;
在编辑器中显示该属性的值,但是不允许编辑。
2.4 BlueprintReadOnly
UPROPERTY(BlueprintReadOnly, Category = "MyCategory")
bool bMyBooleanProperty;
允许蓝图读取该属性的值,但是不能写入。
2.5 EditDefaultsOnly
UPROPERTY(EditDefaultsOnly, Category = "MyCategory")
AActor* DefaultActor;
仅在类的默认对象上编辑该属性,而不是在每个实例上。
2.6 Transient
UPROPERTY(Transient, Category = "MyCategory")
int32 MyTransientProperty;
表示该属性不会被序列化或保存。
2.7 SaveGame
UPROPERTY(SaveGame, Category = "MyCategory")
float SavedFloatProperty;
用于标记一个属性,使其在保存游戏状态时被保存。
2.8 Replicated
UPROPERTY(Replicated, ReplicatedUsing = OnRep_MyProperty, Category = "MyCategory")
int32 MyReplicatedProperty;
表示该属性在网络中复制到客户端。
2.9 EditFixedSize
UPROPERTY(EditFixedSize, EditFixedSizeArray = "4", Category = "MyCategory")
TArray<int32> FixedSizeArray;
允许在编辑器中为数组或 TMap 类型的属性设置固定大小。