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

Posted gaofei7439

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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就可以完美解决该问题。

好了,就这样!汪

ue4蓝图图片生成咋样赋予到模型上

参考技术A 在组件面板添加组件,创建你所需要的模型,并安装所需要的组件。
导入时,导入对话框中将显示多个选项。第一个是3D几何体、布告板、或两者之间进行的选择。如果一棵树只用于近景,它即为一颗“英雄”树,否则将布告板设为最低的LOD时将出现问题(因为有时动态阴影会投射在平坦的布告板几何体上),可选择无视布告板网格体。如果一棵树只用于远景,需要减少3D几何体的加载,则可只将布告板导入。只导入布告板网格体还将创建一个静态网格体,可与UE4的植物图层一同使用。在导入对话框中还可选择3D树材质是否包含细节、高光、以及枝干缝隙混合。还可为材质添加顶点处理,将一个特殊的SpeedTree节点放入材质中,处理风吹、布告板、以及树上其他按每个顶点计算的效果。最后可将SpeedTree建模器中设置的碰撞基元导入新建SpeedTree网格体上的碰撞信息。

以上是关于UE4 C++ 中创建枚举 结构体 在蓝图中使用的流程的主要内容,如果未能解决你的问题,请参考以下文章

[UE4]传值与传引用

[UE4]虚幻4链接独立服务器

ue4蓝图图片生成咋样赋予到模型上

UE4笔记:利用Widget设计一个切换材质功能

14 UE4蓝图:制作门的蓝图类

用UE4来做Zego即构的房间列表