UE4 C++ 调用蓝图里的函数
蓝图里做了许多功能 现在项目要在c++里用 于是要从c++调用蓝图里的函数 步骤:
- 创建c++ Actor类 ACppcallBase
- 在ACppcallBase里声明要用函数(只做声明,不在cpp里写定义) 用BlueprintImplementableEvent修饰,比如
UFUNCTION(BlueprintImplementableEvent, Category = "AAA")
void RainSpawnEvt(float Density = 50.0, float Radius = 1000.0);
如果是c++有实现函数体 在蓝图里想要重载 就要用BlueprintImplementableEvent 然后还要加上一行RainSpawnNativeEvt_Implementation的声明(格式是XXX_Implementation) 然后在cpp里写上RainSpawnNativeEvt_Implementation的实现代码 同样的 RainSpawnNativeEvt不要在cpp里写定义
这么做的话 如果蓝图里没有重载RainSpawnNativeEvt 则调用RainSpawnNativeEvt_Implementation 否则调用蓝图里的RainSpawnEvt
UFUNCTION(BlueprintNativeEvent, Category = "AAA")
void RainSpawnNativeEvt(float Density = 50.0, float Radius = 1000.0);
void RainSpawnNativeEvt_Implementation(float Density = 50.0, float Radius = 1000.0);
- 创建继承自ACppcallBase的蓝图类cppcall 打开编辑界面 编译一下蓝图 增加覆盖函数RainSpawnEvt或者RainSpawnNativeEvt 如果找不到 编译一下蓝图再试试
此时会新增一个事件 接下来往后面连线 做自己想做的事
- 蓝图做好以后 编译蓝图 切换到c++这边 目前看到的有两种调用方法 本人只是简单试了一下 没有深入研究
- 网上看的比较多的是发命令 函数名RainSpawnEvt + 参数 但是参数只能字符串来搞 不知道还能怎么用 有知道的留个言 感谢
FString cmd = FString::Printf(TEXT("RainSpawnEvt 50 1000"));
FOutputDeviceDebug device;
CallFunctionByNameWithArguments(*cmd, device, NULL, true);
- 直接调用 不知道有什么弊端没有
float fDensity = 10.0;
RainSpawnEvt(fDensity, 1000);
这样就实现了c++调用蓝图函数
后记:
整个流程还是有很多限制 比如c++类要从Actor继承 还要搞一个从这个c++类继承的蓝图类
如果要调用其他蓝图类的函数 找到了一个老哥写的 测试过确实可用 这种更加灵活一点
https://blog.csdn.net/qq_35014708/article/details/84569831
参考:
https://blog.csdn.net/u011326794/article/details/75047201
https://www.jianshu.com/p/aee9823e0826
https://blog.csdn.net/qq173681019/article/details/86767313?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.nonecase
上一篇: PHP实现格式化文件数据大小显示的方法
推荐阅读
-
C++学习笔记之调用构造函数和析构函数的顺序
-
QML调用C++的属性的方法:从QML调用C++中的函数以及连接C++中的信号
-
C++调用Python脚本中的函数
-
4.C++中的函数重载,C++调用C代码,new/delete关键字,namespace(命名空间)
-
c++禁止函数的传值调用的方法
-
C++ ----调用exe的函数
-
C++类的空指针调用成员函数的代码
-
c++类模板的声明与调用,与普通模板函数的区别,类模板可以有默认的参数
-
C++程序员应了解的那些事(36)Effective STL第6条:当心C++编译器中最烦人的分析机制 --- 调用构造函数被误认为是函数声明的问题
-
C++重载的构造函数不能互相调用