UE4 C++学习 UFunction函数说明符

本文就什么是UFunction?UFunction怎么用?做一个简单的总结

UFUNCTION和UPROPERTY一样都为UE4的反射系统服务,要知道什么是反射系统可以看上一个博客:UE4 C++学习 浅析UProperty属性说明符 - CatSevenMillion - 博客园 (cnblogs.com)

什么是UFunction?

一样的,先来看下官方解释:

 

 

 

如果你看过上一篇博客,那你应该就知道,UProperty(属性说明符)其实就是对UE4中的一些你可以设置的属性功能有哪些,比如这个属性是否是可读,可编辑,或者是蓝图上能否看见等等。

同理,UFunction就是对UE4中的函数的功能做一些限制。

 

怎么使用UFunction?

下面来看几个例子,例子同上一篇一样,都是部分翻译自benui大佬的博客,想要查看完整的例子可以直接访问网站:All UFUNCTION Specifiers · ben🌱ui (benui.ca)

同上一篇一样

注:标记不区分大小写,但为了可读性,我建议坚持使用这里的大小写示例。

如果值没有空格,则引号是可选的。例如:someBool=“true”与someboo=“true”相同。同样,为了可读性,我建议仅在字符串类型属性周围使用引号。

 

1.BlueprintCallable

使用该关键字的函数可以在蓝图中被调用,执行

例子:

我们在C++中写一个函数Fun(),并且在蓝图中对他进行调用。

C++中的代码:

 

函数的作用是打印一段话在屏幕上,用这个我们来判断函数是否被调用。

 

 

 

 

蓝图:

 

 

 

 这是我们写的一个MyActor类,当MyActor被创建时,就调用这个Fun函数

效果:

 

 

 当点击开始以后,成功出现红字: This is Fun,说明函数成功被调用。(上面一段红字是光线需要重新编译的意思,可以忽略掉)

 

2.BlueprintImplementableEvent

该函数需要在蓝图中实现,且在C++中不能被实现

否则会报错:

 

 

 要使用时,只需要我们在蓝图进行重载实现就可以了

 

 

 

3.BlueprintNativeEvent

该函数使用时需要被重写且不能在C++中实现,如果不被重写的话就会调用一个前缀与原函数一样,但是后缀多了"_Implementaion"的函数。且该函数必须实现

使用:

 

 

 光实现了还是不够,系统会报错,让我们多实现一个函数

如图下实现了函数之后报错解除

4.BlueprintPure

一个BlueprintPure的函数在蓝图中会显示为没有接口。对于默认的使用了const关键字的函数也会被展示成Pure(纯)的函数。我们为了使得一个有const关键字的函数不成为pure函数,我们可以使用 BlueprintPure=false。

注:纯函数不会缓存他的任何结果,所以当你在使用一些大型的纯函数是应该要十分小心。最好避免使用蓝图纯函数来输出数组资产。

例子:

 

 

 5.SealedEvent

此函数不能在子类中重写。SealedEvent关键字只能用于事件。对于非事件函数,将其声明为静态或最终以密封它们。

 

6.CallInEditor

使得不带参数和返回值的 UFUNCTION 显示在实例的面板上

对于添加辅助函数以更改选定实例上的值可能很有用。例如,通过改变敌人的状态来增加敌人的级别,或者使用C++填写默认值。

重申一下,它只适用于没有参数的函数,并返回void。且BlueprintCallable不是必需的。仅适用于类的实例,所以Actor被放在一个关卡里,而不是放在蓝图类里。

在使用时,我们可以把它放在元位置,也可以把它放在主位置,大多数情况下都是放在主位置

 

注:元位置指的是,使用meta=(xxxx)放在属性位上,这仅仅是方便我们在UE4的Editor中开发的存在

找了大部分帖子都说有没有meta关键字其实影响不大,后续遇到关于元位置的问题了再专门出一篇博客吧哎

例子:

 

 

参考链接:

函数说明符 | 虚幻引擎5.0文档 (unrealengine.com)

All UFUNCTION Specifiers · ben🌱ui (benui.ca)

 

posted @ 2022-09-02 19:44  CatSevenMillion  阅读(883)  评论(0编辑  收藏  举报