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

下面都假设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. Environment Modules简单使用

    Environment Modules简单使用 Environment Modules简介 Typically users initialize their environment when they ...

  2. Linux-SSH远程管理服务实战

    figure:first-child { margin-top: -20px; } #write ol, #write ul { position: relative; } img { max-wid ...

  3. ssh远程登录过程中卡住

    1.首先排查网络连通性,查看网络是否通畅,远程端口是否开放 2.查看服务器复制,cpu,内存负载是否过大 3.检查ssh配置,查看以下配置是否这样配置 UseDNS no GSSAPIAuthenti ...

  4. 第六周课程总结&实验报告

    一.实验目的 (1)掌握类的继承 (2)变量的继承和覆盖,方法的继承,重载和覆盖的实现: 二.实验的内容 (1)根据下面的要求实现圆类Circle. 1.圆类Circle的成员变量:radius表示圆 ...

  5. selenium 教程

    selenium 本身是一套web自动化测试工具,但其经常被用于爬虫,解决一些复杂爬虫的问题. selenium 用于爬虫时,相当于模拟人操作浏览器. 浏览器驱动 使用 selenium 需要先安装 ...

  6. 剑指offer-用两个栈来实现一个队列-队列与栈-python

    用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 思路:使用两个栈,stackA 用来接收node stackB 用来接收 stackA 的出栈 # -*- cod ...

  7. JS中For循环中嵌套setTimeout()方法的执行顺序

    在For循环中执行setTimeOut()方法的代码,执行顺序是怎样的呢? 代码如下 function time() { for(var i= 0;i<5;i++){ setTimeout(fu ...

  8. 电子邮件协议:SMTP、POP3、IMAP4

    常见的电子邮件协议:SMTP.POP3.IMAP4   邮件发送协议:SMTP协议 邮件读取协议:POP3.IMAP4协议   SMTP协议(simple mail transfer protocol ...

  9. 为docker配置国内镜像加速器

    docker官方镜像仓库地址为:https://hub.docker.com/search?q=&type=image 因为是国外地址,因此下载镜像时速度很慢. 我们需要配置国内镜像加速, 可 ...

  10. 116-基于5VLX110T FPGA FMC接口功能验证6U CPCI平台 光纤PCIe卡

    基于5VLX110T FPGA FMC接口功能验证6U CPCI平台 一.板卡概述 本板卡是Xilinx公司芯片V5系列芯片设计信号处理板卡.由一片Xilinx公司的XC5VLX110T-1FF113 ...