UE4 蓝图调用C++函数(附带项目工程)
Posted 蒙双眼看世界
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UE4 蓝图调用C++函数(附带项目工程)相关的知识,希望对你有一定的参考价值。
本文要记录三个方向:
一、 蓝图调用所继承的C++类的函数
1.1 创建一个C++的Actor类:
1.2 接着创建基于此C++类的蓝图类:
1.3 命名为BP_MyActorFromC
1.4 将蓝图拖放到场景中,运行时加载此蓝图类。
1.5 接着打开刚创建的C++类,双击用VS打开。
1.6 在.h文件添加函数声明,BlueprintCallable为开放在蓝图中可调用,Category = "MyActorFonctionFromC"为创建自定义的函数分类。
1.7 接着在.cpp文件中实现这个函数的具体功能。
这个时候,保存文件,然后在UE4中菜单栏点编译,每次修改C++类里的内容,都要重新编译。
1.8 编译成功后,即可在蓝图类里直接搜索到C++类里定义的函数:
二、 蓝图调用全局C++函数
第一点是讲蓝图类直接继承C++类调用它所继承的C++类函数的简单方法,接下来更常用的是蓝图类能全局调用C++类里创建的公用函数方法:
2.1 先测试下,在其他蓝图类想调用TestFunction,还是需要经过继承它的蓝图类才能调用:
2.2 接下来就要创建一个能供全局调用的C++函数:
创建一个BlueprintFunctionLibrary的C++类
2.3 在.h文件声明函数
2.4 在.cpp文件中就实现这个函数的具体内容
2.5 保存文件并编译 ,在任意一个蓝图类里都能调用这个C++函数
工程地址:UE4蓝图调用C++函数的工程分享-其他文档类资源-CSDN下载
[UE4]蓝图函数库小结
蓝图函数库的功能非常强劲,如果在项目中使用的话有时能达到事半功倍的效果。
蓝图函数库,Blueprint Function Library。可以非常方便的将代码中的函数暴露给所有的蓝图使用,同时也提供了很好的代码复用性。完成的蓝图函数库可以非常轻易的在其他项目中使用或者共享给其他人。由于在函数库中定义的所有函数都能在其他的蓝图中访问,可以说是和单例模式的C++代码接合的天然素材。也可以防止为了定义一些泛用的函数而频繁的使用接口继承。
使用起来也是非常的简单明了。类似下面的代码就可以完成一个蓝图函数库了。
#pragma once #include "CoBpFuncLib.generated.h" /** Blueprintable并不是必须的 */ UCLASS(Blueprintable) class UCoBpFuncLib : public UBlueprintFunctionLibrary { GENERATED_UCLASS_BODY() public: /** <测试函数组 */ UFUNCTION(BlueprintCallable, Category = "UCoBpFuncLib") static int32 GetHp(); UFUNCTION(BlueprintCallable, Category = "UCoBpFuncLib") static void AddHp(int32 Val); };
上面的是头文件,如果没有打算在蓝图中继承这个函数库的话可以选择去掉这个声明。
#include "CoBpFuncLib.h" #include "LogicMisc/StateCenter.h" ////////////////////////////////////////////////////////////////////////// // UCoBpFuncLib UCoBpFuncLib::UCoBpFuncLib(const class FObjectInitializer& PCIP) : Super(PCIP) { } int32 UCoBpFuncLib::GetHp() { return StateCenter::sharedStateCenter()->miPlayerHp; } void UCoBpFuncLib::AddHp(int32 Val) { StateCenter::sharedStateCenter()->miPlayerHp += Val; }
上面的代码实现通过访问存储有miPlayerHp的单例来进行HP的访问和调整。编译后运行,随便打开一个蓝图都能访问到这两个函数。注意,上面代码中并没有给出StateCenter的定义,如果有想要直接尝试的童鞋请去掉相关的代码。
有了蓝图函数库,我们在进行游戏逻辑设计时就又多了很多选择。
以上是关于UE4 蓝图调用C++函数(附带项目工程)的主要内容,如果未能解决你的问题,请参考以下文章