虚幻4 C++ UFUNCTION 宏 参数解析

本文介绍了虚幻引擎4(UE4)中C++的UFUNCTION宏,用于标记可由蓝图调用的函数。重点讲解了BlueprintCallable、BlueprintImplementableEvent和BlueprintNativeEvent三个关键参数,以及它们在蓝图和C++中的不同用法。通过设置Category参数,可以对函数进行分类管理。示例代码展示了如何声明和实现带有 BlueprintNativeEvent 的函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

虚幻引擎c++中定义了许多宏,如UCLASS(),UPROPERTY(),UFUNCTION(),USTRUCT()等,其中UFUNCTION()宏添加在函数前面,填入适当参数可以帮助函数实现特定的功能, 如允许蓝图调用该函数。这里总结下UFUNCTION()宏几个重要的参数。

BlueprintCallable,蓝图可以调用该函数,但是函数体只能在c++中实现;

BlueprintImplementableEvent,蓝图可以调用该函数,而且该函数的具体实现只能在蓝图中进行;

BlueprintNativeEvent,蓝图可以调用该函数,同时该函数的实现在c++中已经完成了,但是蓝图可以对该函数进行覆盖重写;这个参数可以实现最灵活的函数调用;

需要注意的是,在c++中对该函数进行声明和实现时要做一些特殊处理。首先,要声明一个新的虚函数,函数名为原名加 _Implementation ;其次,对该函数的c++实现要转而对该虚函数进行;而且,无论c++或者蓝图调用该函数时,都是直接使用函数的原名。

可以参考官方这个c++的教学示例。
https://docs.unrealengine.com/latest/CHN/Programmin

### 如何在虚幻引擎中使用C++创建或调用蓝图函数库 #### 创建自定义蓝图函数库类 为了使C++代码能够被蓝图所访问,需继承`UBlueprintFunctionLibrary`类来创建一个新的函数库。此类允许开发者将静态方法暴露给蓝图编辑器。 ```cpp #include "BlueprintFunctionLibrary.h" UCLASS() class MYPROJECT_API UMyCustomBPLibrary : public UBlueprintFunctionLibrary { GENERATED_BODY() public: /** 自定义函数 */ static void MyCustomFunction(); }; ``` 此部分展示了如何声明一个可由蓝图使用的静态成员函数[^1]。 #### 实现自定义函数 实现这些静态函数时需要注意它们应当为公共(static)属性以便于蓝图识别并调用: ```cpp void UMyCustomBPLibrary::MyCustomFunction() { // 函数逻辑... } ``` 上述代码片段说明了怎样具体地去实现在头文件里声明的方法体[^2]。 #### 注册与元数据标签 为了让新加入的功能更好地融入到蓝图环境中,在某些情况下还需要利用以及元数据标签(`UPROPERTY()`/`UFUNCTION()`)进一步配置其行为特性。例如设置显示名称、类别分类等参数让使用者更容易理解和操作该组件。 对于希望向外部开放供蓝图调用的过程而言,则应采用如下形式添加至对应位置: ```cpp UFUNCTION(BlueprintCallable, Category="MyCategory") static void AnotherCustomFunction(); ``` 这段描述解释了通过指定额外选项使得接口更加友好直观的方式[^3]。 #### 在蓝图中调用C++函数 一旦完成了以上步骤之后,编译项目即可刷新蓝图节点列表看到新增加的内容项;此时便可以直接拖拽连接或者搜索找到对应的入口点来进行交互式编程工作流构建了。 ```blueprint // 假设有一个名为 'Call Custom Function' 的事件触发器, // 它会自动关联到我们之前定义好的 C++ 方法上执行相应动作。 Event Call Custom Function -> Execute MyCustomFunction() ``` 这里演示的是当一切准备就绪后,最终可以在可视化脚本环境里面轻松调用先前封装起来的能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值