(主要内容来自官方文档,加入了一些自己的理解)

下面都假设C++中有个函数名称为SomeFunction.

  • C++调用蓝图函数:

在C++函数声明前加入BlueprintImplementableEvent标签,则SomeFunction在蓝图中以事件的方式出现,可以调用该事件。

UFUNCTION(BlueprintImplementableEvent, Category="SomeCategory")
void SomeFunction();

注意,该函数在C++中不能有实现(定义),不然编译会报错。

这种跨边界调用方式的意义在于:可以在C++中其他位置调用一个目前没有任何功能的函数(事件),而该函数的具体实现交给使用蓝图的设计师来决定。

  • 给上述的函数添加默认的C++实现:

要想添加默认的C++实现,就不能使用BlueprintImplementableEvent标签,而是对该函数使用BlueprintNativeEvent,另外,需要手动再添加一个函数声明,函数名称有固定的格式:SomeFunction_Implementation。

SomeFunction不能有实现(定义),SomeFunction_Implementation必须有实现(定义)。

    //.h文件********************************

    UFUNCTION(BlueprintNativeEvent, Category = "SomeCategory")
void SomeFunction(); void SomeFunction_Implementation(); //.cpp文件******************************** void AMyActor::SomeFunction_Implementation()
{
UE_LOG(LogTemp, Warning, TEXT("Implenetaion in C++"));
} //在Tick中调用SomeFunction(),会自动优先调用Somefunction_Implementation()
void AMyActor::Tick(float DeltaTime)
{
Super::Tick(DeltaTime);
SomeFunction();
}

调用方式:在调用了SomeFunction()的地方有限调用SomeFunction_Implementation的实现,但如果在蓝图中定义了SomeFunction事件(即在蓝图的SomeCategory分类中选择Event Some Function事件,即使后面不连接任何内容),则会忽略SomeFunction_Implementation中的实现,只采用蓝图中的实现。

阅读引擎源代码发现SomeFunction_Implementation也可以不需要声明,直接在CPP文件中写其实现即可

跨 C++ 和蓝图边界调用函数的更多相关文章

  1. Unreal Engine 4 Radiant UI 插件入门(三)——从蓝图中调用JS

    不知道大家有没有混淆.这篇教程说的是从蓝图中调用JS的功能(以改变H5内的内容). 在安装了UE4和RadiantUI的前提下学习这篇教程.本篇教程接着上一篇教程,建议请先看上一篇. 第一步:在网页中 ...

  2. shell调用函数返回值深入分析

    编写shell脚本过程中,我们经常会自定义一些函数,并根据函数的返回值不同来执行相应的流程,那么我们如何来获取函数的返回值呢? 首先shell中调用函数有两种方式: 第一种:value=`functi ...

  3. 总结javascript中的全局变量和局部变量的区别以及声明函数和调用函数的区别

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="utf-8&quo ...

  4. FastReport里面正确调用函数的方法

    FastReport里面正确调用函数的方法   错误:  [FormatDateTime('yyyy-mm-dd',[frxDBDataset1."日期"])] --------- ...

  5. Python之调用函数

    Python之调用函数 Python内置了很多有用的函数,我们可以直接调用. 要调用一个函数,需要知道函数的名称和参数,比如求绝对值的函数 abs,它接收一个参数. 可以直接从Python的官方网站查 ...

  6. thinkphp 前台html调用函数 格式化输出

    仅仅是输出变量并不能满足模板输出的需要,内置模板引擎支持对模板变量使用调节器和格式化功能,其实也就是提供函数支持,并支持多个函数同时使用.用于模板标签的函数可以是PHP内置函数或者是用户自定义函数,和 ...

  7. 向量和矩阵的范数及MATLAB调用函数

    范数就是长度的一种推广形式,数学语言叫一种度量.比如有一个平面向量,有两个分量来描述:横坐标和纵坐标.向量的二范数就是欧几里得意义下的这个向量的长度.还有一些诸如极大值范数,就是横坐标或者纵坐标的最大 ...

  8. PHP 打印调用函数入口地址(堆栈),方便调式

    今天网站出现一个BUG,然后直接在数据库类里面写日志,看是哪条SQL出了问题,SQL语句到是找到了,但是不知道这条SQL语句来自何处,于是就想啊,如果能有一个办法,查看当前正在运行的这个方法是被哪个方 ...

  9. arguments.callee 调用函数自身用法----JSON.parse()和JSON.stringify()前端js数据转换json格式

    arguments.callee 调用函数自身用法 arguments.callee 在哪一个函数中运行,它就代表哪个函数. 一般用在匿名函数中. 在匿名函数中有时会需要自己调用自己,但是由于是匿名函 ...

随机推荐

  1. Vue-cli项目与element导航菜单控件的结合使用以及遇到的问题

    1.基本使用 第一种常用写法:导航菜单与 router-view 的配合使用 将所用的导航菜单数据编写成一个数组的形式,提高维护性: 在utils工具文件夹中建立utils.js文件: import ...

  2. MySql 性能优化之 Explain

    MySQL 之 Explain 输出分析 背景 前面的文章写过 MySQL 的事务和锁,这篇文章我们来聊聊 MySQL 的 Explain,估计大家在工作或者面试中多多少少都会接触过这个.可能工作中实 ...

  3. git自动上传脚本及基本代码

    git_auto.bat git add . git add -A git add -u git commit -m "text" git pull --rebase origin ...

  4. [转帖]SQL 里面的 case when 的用法

    SQL之case when then else end用法介绍 https://www.2cto.com/database/201804/740772.html 要培训了 看到有case when 之 ...

  5. OpenGL字体绘制

    /* glfont.hpp sdragonx 2019-08-15 00:03:33 opengl字体类,提供初学者参考学习 opengl初始化之后,创建字体 font.init(L"微软雅 ...

  6. mui前端框架下拉刷新分页加载数据

    前台 mui.init(); (function($) { //阻尼系数 var deceleration = mui.os.ios?0.003:0.0009; $('.mui-scroll-wrap ...

  7. React 使用相对于根目录进行引用组件

    在对自己开发的组件中经常会做诸如以下的引用: import genFetchEntryListArgs from '../../../utils/table/genFetchEntryListArgs ...

  8. 通过编写串口助手工具学习MFC过程——(八)遇到的一些问题

    通过编写串口助手工具学习MFC过程 因为以前也做过几次MFC的编程,每次都是项目完成时,MFC基本操作清楚了,但是过好长时间不再接触MFC的项目,再次做MFC的项目时,又要从头开始熟悉.这次通过做一个 ...

  9. P3198 [HNOI2008]遥远的行星

    传送门 发现 $A$ 不大,又允许较大的误差,考虑乱搞 考虑求出每个位置的答案,因为有 $1e5$ 个位置,所以每个位置差不多可以计算 $100$ 次贡献 所以把每个可以贡献的位置尽量均匀分成 $10 ...

  10. MinGW的安装

    我在MinGW官网下载到的版本是mingw-w64-install.exe,不过这差不多是一年以前的事了……   安装路径:D:\Program Files (x86)\mingw-w64\i686- ...