虚幻引擎(UE4)自定义蓝图类型转换器

前言

在蓝图开发中,应该很多人都遇到过需要将整型数据输出打印到屏幕。我们知道蓝图输出日志节点只能输出字符串类型数据。如果你想要输出整型数据,从强类型语言特性来说,这是不被允许得。但是在实际使用中,蓝图只需要直接拖拽即可完成操作。这就是蓝图为什么容易学习的原因。

图一

其实这不是理所当然的功能,一直说蓝图简单的最主要原因是:设计者在把你的需求全部想到了,让你在使用中觉得这些都是理所当然。好处是更简单,坏处就是你会越来越依赖这些设计者。

如果我添加了自己的类型,是否可以转换成字符串呢?甚至是其他类型呢?这当然是可以的。其实我们把鼠标停放到转换节点上,你就能发现奥秘了!

图二(节点所在源码展示)

从图中可以看到节点的源码位置,跳到源码里。

图三(示例头文件部分)

步骤

1、创建蓝图函数库类(必须在蓝图函数库类中完成)

2、设计自定义类型(类型随意,必须蓝图可识别,声明在头文件中),以自定义结构体为例。

USTRUCT(BlueprintType)
struct FStrawberry
{
	GENERATED_BODY()

	UPROPERTY(BlueprintReadWrite, EditAnywhere)
	FString MyName;
	
};

3、编写转换函数(函数需要添加到蓝图函数库中

头文件中的代码

UFUNCTION(BlueprintPure, meta=(DisplayName = "ToString (Strawberry)", CompactNodeTitle = "->", BlueprintAutocast), Category="Utilities|String")
	static FString Conv_StrawberryToString(FStrawberry InStrawberry);

源文件中的代码

FString UMyBlueprintFunctionLibrary::Conv_StrawberryToString(FStrawberry InStrawberry)
{
	return InStrawberry.MyName;
}

4、编译后即可在蓝图中使用转换节点

图四

当然如何你需要可以设计自己的任意转换类型,只要你需要

说明

  • 函数必须编写在蓝图函数库中
  • 函数必须是公开静态成员函数
  • 函数名称随意,为了清晰性建议遵从引擎命名格式结构
  • 转换目标类型必须为返回类型
  • 来源类型必须是第一个传入参数(可以有多个参数)
  • 函数必须使用BlueprintPure标记,来隐藏输入输出执行引脚
  • CompactNodeTitle = “->”可以省略,此标记用来做节点标题名称
  • BlueprintAutocast标记必须保留,标记为转换节点

以上是你在设计过程中需要注意并考虑的。整个过程只能在C++中完成,如果你知道在蓝图中添加的方法,请留言告诉我。

引擎版本:4.27.2

添加评论

您的电子邮箱地址不会被公开。 必填项已用 * 标注