2023年1月2日
虚幻引擎(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