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

蓝图里做了许多功能 现在项目要在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++ 调用蓝图里的函数_第1张图片
    此时会新增一个事件 接下来往后面连线 做自己想做的事
    UE4 C++ 调用蓝图里的函数_第2张图片
  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)