欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

UE4 C++ 调用蓝图里的函数

程序员文章站 2022-06-05 07:58:41
...

蓝图里做了许多功能 现在项目要在c++里用 于是要从c++调用蓝图里的函数 步骤:

  1. 创建c++ Actor类 ACppcallBase
  2. 在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);
  1. 创建继承自ACppcallBase的蓝图类cppcall 打开编辑界面 编译一下蓝图 增加覆盖函数RainSpawnEvt或者RainSpawnNativeEvt 如果找不到 编译一下蓝图再试试
    UE4 C++ 调用蓝图里的函数
    此时会新增一个事件 接下来往后面连线 做自己想做的事
    UE4 C++ 调用蓝图里的函数
  2. 蓝图做好以后 编译蓝图 切换到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

相关标签: UE4