【UE4】蓝图结构体入门及案例

本文详细介绍了UE4中的结构体概念,通过结构体与数组的对比,阐述了结构体作为变量聚合多种类型数据的特点。文章通过创建、修改结构体变量,以及结构体数组的操作,如获取、修改、添加、移除元素等节点的使用,结合一个背包系统的案例,深入浅出地展示了结构体在蓝图中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

结构体

  • 结构体是什么?

UE4中存在许多不同的变量类型,浮点布尔整数字符串,等等。我们赋予变量意义,用于处理程序的运行,在需要很多意义相同的数据时,我们会应用数组的概念来储存一系列相同类型的数据。但是对于数组中的元素,其的类型是固定不变的唯一一种,而在实际的问题中我们往往需要多个不同类型的变量,这时我们就可以运用结构体来存储一系列不同类型的数据
在这里插入图片描述

(图1-各种类型的变量)
注意!:虽然我们在这里将结构体与数组进行对比,但仍需要记住的是结构体仍然是一个变量,他是一个将许多变量类型聚合在自己体内的新变量,下面关于糖果与盒子的将生动的给你展示两者的区别

结构体仍然是变量

(图2-结构体仍然是变量)
  • 创建结构体

在主视口内容浏览器右键→蓝图→结构即可创建结构体,打开结构体,可以在结构编辑器中编辑结构体所包含的变量

创建结构体

(图3-创建结构体)

修改包含的成员

(图4-修改结构体包含的成员)
  • 结构体相关的节点

在蓝图中创建变量后,可以在右方的细节面板的变量类型中,搜索创建的结构体名称来将变量类型修改为结构体变量

在这里插入图片描述

(图5-修改变量为创建的结构体变量)

1.中断(结构体)/创建(结构体)

将结构体拖入蓝图中,从结构体引脚拖出即可看到 中断 节点,之前说过,结构体相当于很多变量的聚合,而中断节点便是将结构体打碎,获得结构体的各个成员的数据
中断节点

(图6-中断节点)

打碎,就有相应的聚合节点,在节点搜索框中搜索 创建+(结构体名称) 便可以获得创建结构体节点,输出为变量类型为当前结构体的数据

2.修改结构体中的变量

前面说过

### 如何在 Unreal Engine 中通过蓝图向 C++ 传递结构体 为了实现在 Unreal Engine 蓝图中将结构体传递给 C++ 函数的功能,需遵循特定的方法来定义和使用这些结构体。 #### 定义可被蓝图使用的C++ 结构体 要在蓝图中创建并传递自定义结构体到 C++ 函数,首先应在 C++ 类文件内声明此结构体,并标记其为 `USTRUCT()` 和 `BlueprintType` 属性。这使得该结构体可以在蓝图编辑器中可见并且能够作为参数传入函数调用[^2]。 ```cpp // MyStruct.h 文件中的例子 #include "CoreMinimal.h" #include "GameFramework/Actor.h" #include "MyStruct.generated.h" USTRUCT(BlueprintType) struct FMyCustomStruct { GENERATED_BODY() public: UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Data") float Value; UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Data") FString Name; }; ``` #### 创建接收结构体的C++ 函数 接着,在希望处理来自蓝图的数据的地方(比如某个 Actor 或者其他类),应该编写一个接受上述结构体类型的公共成员函数,并同样标注为 `BlueprintCallable` 以便于蓝图访问。 ```cpp // MyClass.h 文件内的部分代码片段 UPROPERTY() FMyCustomStruct ReceivedStruct; UFUNCTION(BlueprintCallable, Category = "Example") void ReceiveStructFromBP(FMyCustomStruct InStruct); ``` 对应 cpp 实现如下: ```cpp // MyClass.cpp 文件内部的具体实现 void AMyClass::ReceiveStructFromBP(FMyCustomStruct InStruct) { // 处理接收到的结构体数据... } ``` #### 使用蓝图节点调用带有结构体参数的C++ 方法 完成以上准备工作之后,便可在蓝图图表里拖拽出对应的对象实例,找到之前定义好的方法名,此时会发现输入端口已经包含了预期的结构体型变量。可以直接连接上预先准备好的结构体变量或者现场构建一个新的出来供传递之用[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值