赞
踩
根据 MyActor_First 类创建新的 蓝图类->BP_First。
// 头文件中声明函数
UFUNCTION(BlueprintCallable, Category = "BPFunc_Lib")
void CppPrint();
/*
和公开属性类似,使用宏 UFUNCTION 即可。UFUNCTION() 负责将C++函数公开给反射系统。**BlueprintCallable ** 选项将其公开给蓝图虚拟机。每一个公开给蓝图的函数都需要一个与之关联的类别(Category),这样右键点击快捷菜单的功能才能正确生效。
双击我们的 MyActor_First 蓝图类,打开蓝图编辑器。在空白处单击右键,在弹出的列表中即可找到我们公开给蓝图的C++函数。如下图:BPCallable_CFunc
*/
// cpp文件中定义函数
void MyActor_First::CppPrint()
{
GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Red, FString::Printf(TEXT("Test BP Callable C++ Func!")));
}
UFUNCTION(BlueprintImplementableEvent, Category = "BP_Funclib")
void BPPrint();
在C++调用BPPrint函数
在C++中CppPrint函数中调用BPPrint函数,运行结果: 先输出红色Test BP Callable C++ Func!, 在输出蓝色Hello World
void AMyActor_First::CppPrint()
{
GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Red, FString::Printf(TEXT("Test BP Callable C++ Func!")));
BPPrint();
}
这种函数的调用方法与任何其他的C++函数没有区别。虚幻引擎会在其内部自动生成C++函数的基本实现,该实现了解如何调用蓝图VM。这通常称为形实替换。如果对应的蓝图没有实现该函数,则函数行为就像C++空函数体一样,不执行任何操作。如果想要提供C++函数的默认实现,同时仍允许蓝图覆盖此函数,则需要另一个说明符 BlueprintNativeEvent。该说明符仍会自动生成C++函数的基本实现,但是同时还会生成一个新的函数声明,类似于<函数名>_Implementation()。必须实现该函数,否则项目无法建立联接。声明与实现如下:
UFUNCTION(BlueprintNativeEvent, Category = "BPFunc_Lib")
void BPPrint1();
void AMyFirstActor::BPPrint1_Implementation()
{
GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Red, FString::Printf(TEXT("C++ Default Print")));
}
参考链接:https://blog.csdn.net/u011476173/article/details/97927230
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。