虚幻学习笔记10—C++函数与蓝图的通信

这篇具有很好参考价值的文章主要介绍了虚幻学习笔记10—C++函数与蓝图的通信。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、前言

        除了上一章C++变量与蓝图通信讲的变量能与蓝图通信外,还有函数和枚举也可以和蓝图通信。函数的关键字为”UFUNCTION“、枚举的关键字为”UENUM“。

二、实现

2.1、BlueprintCallable蓝图中调用

  该函数时带执行的,带入如下。编译成功后在蓝图中输入后可以找到,并点击使用如图2.1.1所示

	/// <summary>
	/// 暴露该函数可在蓝图中调用
	/// </summary>
	UFUNCTION(BlueprintCallable, Category = "MyFunction")
	void BlueprintCallable1();
虚幻学习笔记10—C++函数与蓝图的通信,Unreal,虚幻,学习,笔记
图2.1.1

2.2、BlueprintPure蓝图中的纯函数

        代码如下,其在蓝图中的形式如图2.2.1所示,它是一个纯函数和图2.1.1不同的是它没有左右

	/// <summary>
	/// 可在蓝图中调用的纯函数的定义
	/// </summary>
	UFUNCTION(BlueprintPure, Category = "MyFunction")
	bool BlueprintPure2();
虚幻学习笔记10—C++函数与蓝图的通信,Unreal,虚幻,学习,笔记
图2.2.1

两边的执行引脚。

2.3、BlueprintImplementableEvent

        在C++中声明蓝图中实现,在蓝图中可重载,可以有参数和返回值,无返回值的是事件,有返回值的是函数。

1、没有返回值和参数

        定义的代码如下所示,

	UFUNCTION(BlueprintImplementableEvent)
	void ImplementableEvent1();

然后在蓝图中它会作为事件添加到蓝图中使用,如图2.3.1所示:

虚幻学习笔记10—C++函数与蓝图的通信,Unreal,虚幻,学习,笔记

虚幻学习笔记10—C++函数与蓝图的通信,Unreal,虚幻,学习,笔记
图2.3.1

该事件可以在C++代码中调用

void AMyPawn1::BeginPlay()
{
	Super::BeginPlay();
	ImplementableEvent1();
}

2、只有返回值

只有返回值的在蓝图中会作为函数,如图2.3.2所示,同时这个函数可以在蓝图中被重写

	UFUNCTION(BlueprintImplementableEvent)
	int32 ImplementableEvent2();
虚幻学习笔记10—C++函数与蓝图的通信,Unreal,虚幻,学习,笔记
图2.3.2

但是在蓝图还无法调用它,需要添加”Blueprint Callable“关键字,如下代码,注意两个关键字的顺

虚幻学习笔记10—C++函数与蓝图的通信,Unreal,虚幻,学习,笔记
图2.3.3
	UFUNCTION(BlueprintCallable, BlueprintImplementableEvent)
	int32 ImplementableEvent2();

序,如果把Blueprint Callable“关键字放在后面编译不通过。增加关键字后的蓝图中可以调用,如图2.3.4所示:

虚幻学习笔记10—C++函数与蓝图的通信,Unreal,虚幻,学习,笔记
图2.3.4

3、只有参数

代码如下所示,添加一个带参数的,这个效果和图2.3.1中的类似,不同之处是这里会带参数,如图2.3.4所示:

	UFUNCTION(BlueprintImplementableEvent)
	void ImplementableEvent3(const FString& myStr);
虚幻学习笔记10—C++函数与蓝图的通信,Unreal,虚幻,学习,笔记
图2.3.4

4、参数和返回值都有

代码如下所示,其效果和图2.3.2所示类似,区别之处在于此处是带输入参数的。

	UFUNCTION(BlueprintImplementableEvent)
	int32 ImplementableEvent4(const FString& myStr);

2.4、BlueprintNativeEvent

        在C++中声明和实现,蓝图可重载,函数实现的后面要加Implementation,否则会编译出错,但是在调用的时候还是用声明时的名字。无返回值的是事件,有返回值的是函数。代码如下

	UFUNCTION(BlueprintNativeEvent)
	void BlueprintNativeEvent1();
	UFUNCTION(BlueprintNativeEvent)
	int32 BlueprintNativeEvent2();
	UFUNCTION(BlueprintNativeEvent)
	void BlueprintNativeEvent3(const FString& myStr);
	UFUNCTION(BlueprintNativeEvent)
	int32 BlueprintNativeEvent4(const FString& myStr);

实现的代码如下,又返回值的必须返回一个值。

void AMyPawn1::BlueprintNativeEvent1_Implementation()
{
	GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::Red, TEXT("这是一个C++代码写的BlueprintNativeEvent事件"));
}

int32 AMyPawn1::BlueprintNativeEvent2_Implementation()
{
	return 0;
}

void AMyPawn1::BlueprintNativeEvent3_Implementation(const FString& myStr)
{

}

int32 AMyPawn1::BlueprintNativeEvent4_Implementation(const FString& myStr)
{
	return 0;
}

2.5、Meta元素说明符

该函数定义如下,而且必须实现,通过meta关键字实现其在蓝图中的名称改为“MyPrintTest”

	//元数据说明符,也即别名,在蓝图中会显示DisplayName定义的名字
	UFUNCTION(BlueprintCallable, Category = "MyFunction", meta = (DisplayName = "MyPrintTest"))
	void PrintMeta();

2.6、枚举

首先定义一个宏,代码如下,生成枚举的反射数据,通过反射将枚举暴露给蓝图,实现C++和蓝图的通信,BlueprintType的作用是可以在蓝图创建变量的时候也可以作为选项。如图2.6.1所示

UENUM(BlueprintType)//生成枚举的反射数据,通过反射将枚举暴露给蓝图,实现C++和蓝图的通信,BlueprintType的作用是可以在蓝图创建变量的时候也可以作为选项
namespace MyEnumType
{
	enum MyCustomEnum
	{
		Type1,
		Type2,
		Type3,
	};
}
虚幻学习笔记10—C++函数与蓝图的通信,Unreal,虚幻,学习,笔记
图2.6.1

在蓝图中创建一个新的变量,变量的类型中可以选中C++代码中创建的这个枚举。同时,在蓝图中也可以调用该枚举,如图2.6.2所示:

虚幻学习笔记10—C++函数与蓝图的通信,Unreal,虚幻,学习,笔记
图2.6.2
通过以下代码可以实现在各类面板和蓝图中使用该变量
	//枚举
	UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "MyEnum")
	TEnumAsByte<MyEnumType::MyCustomEnum> MyCustomEnum;

同时也可以在蓝图中调用和编辑该变量,如图2.6.3所示

虚幻学习笔记10—C++函数与蓝图的通信,Unreal,虚幻,学习,笔记
图2.6.3

通常一个定义里只能有一个枚举,如下代码中会编译不通过,在MyEnumType中只能定义一个。

UENUM(BlueprintType)
namespace MyEnumType
{
	enum MyCustomEnum
	{
		Type1,
		Type2,
		Type3,
	};
	enum MyEnum2
	{
		One, Two, Three,
	};
}

三、总结

3.1、BlueprintImplementableEvent的函数在C++代码中只需要声明不需要实现。

3.2、BlueprintNativeEvent的函数在C++代码中声明了还必须实现,不实现会编译报错。实现中的函数名称后总有加上”_Implementation“,但是在调用的时候又要去掉”_Implementation“,这样才能在蓝图中被调用,使用带后缀”_Implementation“的只会在C++中调用,而蓝图中不会被调用。

3.3、”Blueprint Callable“关键字通常是放在前面的,如果放在后面可能会编译不通过。

3.4、BlueprintType的作用是可以在蓝图创建变量的时候也可以作为选项。

3.5、枚举的定义中只能定义一个枚举,多个会编译不通过。文章来源地址https://www.toymoban.com/news/detail-759746.html

到了这里,关于虚幻学习笔记10—C++函数与蓝图的通信的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • [虚幻引擎插件介绍] DTGlobalEvent 蓝图全局事件, Actor, UMG 相互回调,自由回调通知事件函数,支持自定义参数。

    本插件可以在虚幻的蓝图 Actor, Obiect,UMG 里面指定绑定和执行消息,可带自定义参数。 参数支持 Bool,Byte,Int,Int64,Float,Name,String,Text,Vector,Rotator,Transform,Object,Actor。 绑定事件 Bind Global Event (XXX) 此类型节点可以绑定全局回调事件。 Key :绑定的事件关键值,只有

    2024年02月09日
    浏览(63)
  • 虚幻学习笔记16—C++和3DUI(二)

    一、前言         上一篇虚幻学习笔记15—C++和UI(一)中介绍了通过C++代码创建2D的ui,本章主要讲解怎么用C++代码创建3D的UI,在虚幻学习笔记3—UI跟随弹窗这章中讲解了怎样用蓝图创建一个3D的UI,并且和其交互。         本系列使用的虚幻5.2.1,vs2022。 二、实现      

    2024年02月01日
    浏览(43)
  • unreal虚幻引擎源码开发

    https://github.com/EpicGames/UnrealEngine.git unreal的源码在github上面有权限限制,需要申请加入EpicGames组织才行。(EpicGames官网上绑定github账号,平台会自动邀请你加入) 运行setup.bat,网络不是很好,大多数时候是失败的,可以修改bat如下 升级失败了,自动跳转继续更新知道下载完所

    2024年02月16日
    浏览(55)
  • Unreal中利用控件蓝图系统控制模型的材质切换

    如果想要将某个模型做成可以切换材质的网格体 首先将此网格体做成Actor蓝图,这里我将模型名字命名为Mod_teapoy 右击创建一个蓝图 将此模型 Mod_teapoy 直接拖放到到蓝图中,我们这里命名为 “BP_茶几” 这里模型拥有多维材质(两个材质是一样的)。不影响后面的材质替换。

    2023年04月08日
    浏览(39)
  • Unreal Engine 虚幻引擎,性能分析,优化(二)

    目录 一、CPU 性能分析 二、GPU性能分析 三、Memory内存使用 一、CPU 性能分析 如渲染线程中出现 CPU 受限,原因可能是绘制调用过多。这是一个常见问题,美术师通常会将绘制调用进行组合,从而减少消耗(如:将多个墙壁组合为一个网格体)。实际消耗存在于多个区域中:

    2024年02月05日
    浏览(61)
  • UE4/5在蓝图细节面板中添加函数按钮(蓝图与c++的方法)

    目录 在细节面板中添加按钮使用函数 蓝图的方法 事件 函数  效果  uec++的方法 效果 很多时候,我们可以看到一些插件的actor类中,点击一下之后就可以实现如矩阵一样的效果。 实际上是因为其使用了函数来修改了蓝图中的数值。 那么这种可以直接使用函数是怎么设置的呢

    2024年02月11日
    浏览(35)
  • [虚幻引擎插件说明] DTOperateFile 使用蓝图操作文件

    本插件可以在虚幻里面使用蓝图文件进行读、写、移动、复制、删除等操作。 目录 1. 节点说明 Get Stat Data – 获取文件信息 Directory Exists – 判断目录是否存在 Directory Create – 创建目录 Directory Delete – 删除目录 File Exists – 判断文件是否存在 File Size – 获取文件大小 File Dele

    2024年02月17日
    浏览(84)
  • unreal ue 虚幻 导入HDR崩溃 显存不够的解决方案

    错误原文: out of video memory trying to allocate a rendering resource. Make sure yourvideo card has the minimum required memory, try lowering the resolution and/orclosing other applications that are running. Exiting... 我用的ue5 ue4同理 导入的截图,在preparing阶段就会直接崩溃   不用换Dx11,不用关光追,增加分页文件(虚

    2024年02月11日
    浏览(40)
  • UE(Unreal Engine,虚幻引擎)和Unity的区别与联系

    一、基本概念 游戏制作软件中最著名的两个游戏引擎是UE和Unity,二者有各自的特点和适用场景。 UE是指Unreal Engine(虚幻引擎)的简称,它是由Epic Games(Epic游戏公司)开发的一款高度先进的游戏开发工具。UE是一种3D图形渲染引擎,为开发者提供了一系列强大的功能,使他们

    2024年04月13日
    浏览(47)
  • UE4(Unreal Engine4)虚幻引擎视口布局,并且自定义HDRI

    在UE4中搭建电影级场景。先看下效果 (1)在UE4(Unreal Engine4)中安装 Quixel Bridge Megascans bridget插件 具体操作:请看我这篇博文:Quixel Bridge Megascans bridget插件 (2)素材准备: Quixel Bridge (1)创建关卡 (2)设置过场动画 (3)加入HDRI背景 (4)重置曝光 (5)组装资源 石头 蘑菇

    2023年04月08日
    浏览(59)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包