UFunction 是虚幻引擎4(UE4)反射系统可识别的C++函数。
UObject 或蓝图函数库可将成员函数声明为UFunction,方法是将 UFUNCTION 宏放在头文件中函数声明上方的行中。
例如:
public:
UFUNCTION(BlueprintCallable, Category = "Snowing,BlueprintFunc")
void BlueprintCallableFunction();
宏将支持函数说明符
更改UE4解译和使用函数的方式。
UFUNCTION的定义:
UFUNCTION([specifier1=setting1, specifier2, ...], [meta(key1="value1", key2, ...)])
ReturnType FunctionName([Parameter1, Parameter2, ..., ParameterN1=DefaultValueN1, ParameterN2=DefaultValueN2]) [const]
可利用函数说明符将UFunction对蓝图可视化脚本图表公开,以便开发者从蓝图资源调用或扩展UFunction,而无需更改C++代码。
在类的默认属性中,UFunction可绑定到委托,从而能够执行一些操作(例如将操作与用户输入相关联)。
声明函数时,可以为声明添加函数说明符
,以控制函数相对于引擎和编辑器的各个方面的行为方式。
函数说明符 | 效果 |
---|---|
BlueprintAuthorityOnly | 如果在具有网络权限的机器上运行(服务器、专用服务器或单人游戏),此函数将仅从蓝图代码执行。 |
BlueprintCallable | 此函数可在蓝图或关卡蓝图图表中执行。 |
BlueprintCosmetic | 此函数为修饰性的,无法在专用服务器上运行。 |
BlueprintImplementableEvent | 此函数可在蓝图或关卡蓝图图表中实现。 |
BlueprintNativeEvent | 此函数旨在被蓝图覆盖掉,但是也具有默认原生实现。用于声明名称与主函数相同的附加函数,但是末尾添加了Implementation,是写入代码的位置。如果未找到任何蓝图覆盖,该自动生成的代码将调用 Implementation 方法。 |
BlueprintPure | 此函数不对拥有它的对象产生任何影响,可在蓝图或关卡蓝图图表中执行。 |
CallInEditor | 可通过细节(Details)面板`中的按钮在编辑器中的选定实例上调用此函数。 |
Client | 此函数仅在拥有在其上调用此函数的对象的客户端上执行。用于声明名称与主函数相同的附加函数,但是末尾添加了Implementation。必要时,此自动生成的代码将调用 Implementation 方法。 |
CustomThunk | UnrealHeaderTool 代码生成器将不为此函数生成thunk,用户需要自己通过 DECLARE_FUNCTION 或 DEFINE_FUNCTION 宏来提供thunk。 |
Exec | 此函数可从游戏内控制台执行。仅在特定类中声明时,Exec命令才有效。 |
NetMulticast | 此函数将在服务器上本地执行,也将复制到所有客户端上,无论该Actor的 NetOwner 为何。 |
Reliable | 此函数将通过网络复制,并且一定会到达,即使出现带宽或网络错误。仅在与Client或Server配合使用时才有效。 |
SealedEvent | 无法在子类中覆盖此函数。SealedEvent关键词只能用于事件。对于非事件函数,请将它们声明为static或final,以密封它们。 |
ServiceRequest | 此函数为RPC(远程过程调用)服务请求。这意味着 NetMulticast 和 Reliable。 |
ServiceResponse | 此函数为RPC服务响应。这意味着 NetMulticast 和 Reliable。 |
Server | 此函数仅在服务器上执行。用于声明名称与主函数相同的附加函数,但是末尾添加了 _Implementation,是写入代码的位置。必要时,此自动生成的代码将调用 _Implementation 方法。 |
Unreliable | 此函数将通过网络复制,但是可能会因带宽限制或网络错误而失败。仅在与Client或Server配合使用时才有效。 |
WithValidation | 用于声明名称与主函数相同的附加函数,但是末尾需要添加_Validate。此函数使用相同的参数,但是会返回bool,以指示是否应继续调用主函数。 |