【UE4从零开始 004】通过蓝图扩展C++类

1、通过蓝图扩展C++类

根据 MyFirstActor 类创建新的 蓝图类

  1. 内容浏览器 视图中,点击 Add New 按钮 或者单击 右键 ,然后点击 Blueprint Class
    在这里插入图片描述
  2. 在弹出的窗口中最下方,点击 All Class, 在搜索框中输入 MyFirstActor ,然后选中我们自己创建的 MyFirstActor类,并且点击 Select 按钮,创建成功后,重命名为 MyFirstBlueprint
    在这里插入图片描述

2、在C++和蓝图中相互调用函数

从蓝图中调用C++函数

  1. 将C++函数公开给蓝图。
UFUNCTION(BlueprintCallable, Category = "MyCppPrint")
		void CppPrint();

和公开属性类似,使用宏 UFUNCTION 即可。UFUNCTION() 负责将C++函数公开给反射系统。**BlueprintCallable ** 选项将其公开给蓝图虚拟机。每一个公开给蓝图的函数都需要一个与之关联的类别(Category),这样右键点击快捷菜单的功能才能正确生效。
双击我们的 MyFirstBlueprint 蓝图类,打开蓝图编辑器。在空白处单击右键,在弹出的列表中即可找到我们公开给蓝图的C++函数。如下图:

在这里插入图片描述
2. 在cpp文件中实现 CppPrint() 函数
代码如下,保存并且编译。

void AMyFirstActor::CppPrint()
{
	GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Red, FString::Printf(TEXT("C++ Print")));
}
  1. 双击 MyFirstBlueprint 蓝图类,打开蓝图编辑器。拖拽 Event BeginPlay 图形中的“三角形”,在弹出框中选择公开给蓝图的C++函数 CppPrint,然后点击蓝图编辑器中的编译,并且保存。如下图:
    在这里插入图片描述
  2. MyFirstBlueprint 拖拽到关卡编辑器中,点击 运行, 注意游戏窗口的左上角,有红色的 C++ Print 字样。

从C++中调用蓝图函数

  1. 在头文件中声明函数,使用说明符 BlueprintImplementableEvent 即可,该函数不需要在C++类中实现。
UFUNCTION(BlueprintImplementableEvent, Category = "MyBPPrint")
		void BPPrint();
  1. 在蓝图编辑器中打开 MyFirstBlueprint,在空白处点击右键,搜索 BPPrint,选择 Event BPPrint,如下图:
    在这里插入图片描述
  2. 实现 Event BPPrint,点击编译。如下图:
    在这里插入图片描述
  3. 在C++中调用此函数,运行游戏看效果。
void AMyFirstActor::CppPrint()
{
	GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Red, FString::Printf(TEXT("C++ Print")));

	BPPrint();
}
  1. 这种函数的调用方法与任何其他的C++函数没有区别。虚幻引擎会在其内部自动生成C++函数的基本实现,该实现了解如何调用蓝图VM。这通常称为形实替换。如果对应的蓝图没有实现该函数,则函数行为就像C++空函数体一样,不执行任何操作。如果想要提供C++函数的默认实现,同时仍允许蓝图覆盖此函数,则需要另一个说明符 BlueprintNativeEvent。该说明符仍会自动生成C++函数的基本实现,但是同时还会生成一个新的函数声明,类似于<函数名>_Implementation()。必须实现该函数,否则项目无法建立联接。声明与实现如下:
UFUNCTION(BlueprintNativeEvent, Category = "MyBPPrint")
		void BPPrint1();
void AMyFirstActor::BPPrint1_Implementation()
{
	GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Red, FString::Printf(TEXT("C++ Default Print")));
}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值