UE4 C++ 中创建枚举、 结构体 在蓝图中使用的流程

目录

1,背景

2,C++ 中创建枚举、结构体的方法

3,蓝图中的表现

 4,结构体的使用

  5,过程中出现的一些问题和解决方案

UE4的头文件XXX.generated.h"   找不到文件。


1,背景

UE4 4.27  

VS 2022 

使用背景: 我们在日常开发中,有一种情况是:我们的枚举在C++ 中定义比较方便。比如:我们的UE4 平台和其他的平台进行通讯时。

涉及到传输数据的类型 。比如很多 设备的种类、仪表的界面种类、操作种类等等。 这些信息可能要和外部平台进行数据交互。

在C++  中定义好枚举 和结构体就会很合适。

2,C++ 中创建枚举、结构体的方法

(1)之前我一直有个疑问, 这个枚举应该创建在 什么样基类的C++ 里面。 后来经过测试发现。基本上创建在任意基类类型的 C++  里面均可以。

(2)我自己 使用了 Actor 基类 和 primary 基类 创建,在其中创建枚举, 都可以在蓝图中正常调用。

primary 基类

UENUM(BlueprintType)
enum class EWorkStyle : uint8   //  EWorkStyle 这个地方名字前面加上了E ,就算删除,蓝图中我没看到什么影响
{
    Cooker,                                                   //第一项默认对应的byte 都是0 ,这个是必须的。 不允许人为设置成非0 的其他数值。
    Driver = 3 UMETA(DisplayName = "God"),  // UMETA() 中 可以设置成别名,就是在 蓝图中,会直接以另外一个名字呈现。同时 可以自定义 当前所对应的数值。比如当前是3, 这样后面对应的开始就是从4 开始。
    Teacher,
    Student,
    Runner,
    Jumpper,
    Dancer
};

Actor 基类 中我们创建结构体

BaseActorStyle.h  中

#pragma once

#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "BaseActorStyle.generated.h"


UENUM(BlueprintType)
enum class ECookerStyle1 : uint8
{
    waterhot,
    Coldwater,
    warm,
    hit,
    jundle
};

USTRUCT(BlueprintType)
struct FCarInfo
{
    GENERATED_BODY()

public:
     UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "thinker")
     FString  thinkerName;

     UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "thinker")
        int32  age;
    UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "thinker")
        TArray<ECookerStyle1> CookerStylearray;

    UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "thinker")
        TMap<ECookerStyle1,int32> CookerStyleMap;
    UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "thinker")
        TMap<FString, int32> CookerStyleStagestringmap;
};

3,蓝图中的表现

(1)枚举的表现

 

 

 4,结构体的使用

 结构体 在蓝图中使用。主要体现在两个方面

(1)在任意蓝图内定义 结构图 可以直接使用此 结构体类型。

 (2)  创建  数据资产 类型的C++   类。 基类是 primaryDataAsset . 

 创建之后,可以直接在 蓝图中 创建数据资产 ,基类 直接使用  ParimaryDataAsset_Thinker 。

注意上面 这个C++ 文件 ,一定要在头文件里面 引用 所有定义数据类型的文件。

 

 
 5,过程中出现的一些问题和解决方案

 过程中: 我们 创建了 Actor 基类的C++ 文件, 在删除了 begin play  相关的文件之后, 突然给我报错了。

6,UE4的头文件XXX.generated.h"   找不到文件。

解决方案:

DebugGame Editor 然后生成(build)一下 后再改回 DevlopmentGame Editor就可以完美解决该问题。

好了,就这样!汪

猜你喜欢

转载自blog.csdn.net/gaofei7439/article/details/126381168