前言

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

图一
图一

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

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

图二(节点所在源码位置提示)
图二(节点所在源码位置提示)

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

图三(示例头文件部分)
图三(示例头文件部分)

步骤

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

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

c++
1
2
3
4
5
6
7
8
9
USTRUCT(BlueprintType)
struct FStrawberry
{
    GENERATED_BODY()
 
    UPROPERTY(BlueprintReadWrite, EditAnywhere)
    FString MyName;
     
};

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

头文件中的代码

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

源文件中的代码

c++
1
2
3
4
FString UMyBlueprintFunctionLibrary::Conv_StrawberryToString(FStrawberry InStrawberry)
{
    return InStrawberry.MyName;
}

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

图四
图四

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

提示

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

引擎版本:4.27.2