欢迎光临散文网 会员登陆 & 注册

六、蓝图访问C++函数/事件(UFUNCTION)

2022-11-24 23:02 作者:爱玩UE5的小哥哥  | 我要投稿

一.蓝图中的函数/事件

1.函数

①带有输入输出引脚的普通函数

②Pure函数(无输入输出引脚)

2.事件

二.C++创建 蓝图可访问的函数/事件

C++将函数公开给蓝图访问的方式与公开变量的原理是一样的,公开变量使用的是UPROPERTY宏,公开函数也需要一个宏,名为UFUNCTION宏.该宏同样结合大量的说明符来使函数在蓝图中具有不同的功能,特性等 

为了方便测试还是沿用的Cpp_Actor的C++类

①BlueprintCallable(蓝图可调用) 

BlueprintCallable 蓝图可调用,C++函数可以在蓝图中被调用

这是以个有输入输出引脚的函数(一个返回值的函数)

多个返回值的函数

②BlueprintPure(蓝图纯函数) ,纯函数必须有返回值!!!

这是一个有多个返回值的纯函数(没输入输出引脚的)


首先理解蓝图中Beginplayer函数:

在.h文件中进行声明
在.cpp文件中并未定义,但是却调用了这个函数

解析:

由上图可知,蓝图中的Beginplay事件其实就是C++中的ReceiveBeginPlay函数.该函数的UFUNCTION宏中有一个名为BlueprintImplementableEvent的说明符,该说明符字面意思为:"蓝图可实现事件":

即C++中声明与调用函数(不需要在cpp中定义函数),蓝图中定义函数.下面进行测试



③BlueprintImplementableEvent(蓝图可实现事件)

C++中声明且调用函数(不定义函数),蓝图中定义函数(Functions中进行override),红色无流入引脚的形式存在

红色,我流出引脚


a.函数无形参

.h文件

.cpp文件

b.函数有形参

c.上述ab函数都是无返回值的情况,下面这个是有返回值的情况

.h文件

.cpp文件

有无返回值的区别:无返回值以事件形式存在,有返回值以函数形式存在

③BlueprintNativeEvent(蓝图原生事件) 

a.C++中声明函数,C++和蓝图中都可以定义函数(C++必须实现),如果蓝图不定义,会执行C++中的定义,如果蓝图和C++都定义,蓝图则会覆盖C++定义,只执行蓝图定义.

(2)C++函数声明,需要额外声明一个名为:函数名+_Implementation的返回值和参数列表都一致的函数.

(3)BlueprintNativeEvent需要配合BlueprintCallable一起使用,否则蓝图中不可调用

(4)与BlueprintImplementableEvent 一样,有返回值的在蓝图以函数形式存在,无返回值的在蓝图中以事件形式存在. 

a.无返回值

.h文件

.cpp文件

(1)蓝图中不定义函数

(2)蓝图中定义函数

备注:解决这个bug是对自己写的代码足够自信,声明函数没有返回值,为啥就有返回值了呢?所以确实bug,解决bug

(3)既能实现C++定义的函数,又能实现蓝图定义的函数

b.有返回值

.h文件

.cpp文件

(1)蓝图中不定义函数

(2)蓝图中定义函数

(3)既能实现C++定义的函数,又能实现蓝图定义的函数


六、蓝图访问C++函数/事件(UFUNCTION)的评论 (共 条)

分享到微博请遵守国家法律