UFunction 声明
UFUNCTION 是用以告诉引擎该函数被反射系统识别和管理的宏。
1 | |
其核心功能与用途如下:
- 蓝图暴露:可以将 C++ 函数暴露给蓝图,让开发者在不修改 C++ 代码的情况下,在蓝图中调用或拓展这些函数。
- 委托绑定:可以绑定到委托上,用于处理用户输入等操作。
- 网络回调:可以作为网络回调函数,当某个变量因网络更新而改变时,自动触发并运行自定义代码。
- 控制台命令:可以创建自定义的控制台命令。
- 编辑器拓展:可以在观其编辑器中为游戏对象添加具有自定义功能的按钮。
函数说明符
蓝图交互相关
BlueprintCallable:最常用,允许在蓝图或关卡蓝图中调用该函数。BlueprintPure:声明为纯函数,没有执行引脚,不会修改对象状态,通常用于获取数据。- 注意:纯函数不缓存结果,不建议在其中执行复杂计算或输出数组。
BlueprintImplementableEvent:在 C++ 中声明,但在蓝图中实现。BlueprintNativeEvent:设计为在蓝图中重写,但在 C++ 中有默认实现。- C++ 实现需写在
FunctionName_Implementation中。
- C++ 实现需写在
BlueprintAuthorityOnly:仅在具有网络权限时才会在蓝图中执行。BlueprintCosmetic:表现型函数,不会在 dedicated server 上运行。
网络与 RPC 相关
Server:在客户端调用,在服务器执行。需实现_Implementation。Client:在服务器调用,在拥有该对象的客户端执行。需实现_Implementation。NetMulticast:在服务器调用,在服务器和所有客户端执行。Reliable/Unreliable:配合Server或Client使用。前者保证到达(即使网络拥塞),后者可能因带宽限制丢包。WithValidation:为 RPC 添加验证逻辑。需实现_Validate,返回false则终止调用并可能断开恶意客户端。
编辑器与开发工具
CallInEditor:在编辑器选中实例时,在细节面板生成一个按钮来触发此函数。Category:定义函数在蓝图右键菜单中的分类层级(如 “MyProject|Combat”)。Exec:允许通过游戏内控制台(Console)直接输入函数名执行。
其他特殊说明符
SealedEvent:防止该事件在子类中被重写。CustomThunk:由开发者手动编写转换函数,而不是由UnrealHeaderTool自动生成。
参数说明符
Out:将参数声明为引用传递。- 允许函数在内部修改该参数的值,并将修改后的结果传回给调用者。在蓝图中,这类参数通常表现为右侧的输出引脚。
Optinal:允许调用者在调用函数时省略该参数,为调用提供便利。