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)
本文作者:CatSevenMillion
本文链接:https://www.cnblogs.com/CatSevenMillion/p/16651056.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步